@fluidframework/test-runtime-utils 2.70.0-361248 → 2.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/mocks.d.ts CHANGED
@@ -11,7 +11,7 @@ import { IFluidHandleContext, type IFluidHandleInternal } from "@fluidframework/
11
11
  import { IChannelServices, IChannelStorageService, IDeltaConnection, IDeltaHandler, IChannel, IFluidDataStoreRuntime, IChannelFactory, type IDeltaManagerErased } from "@fluidframework/datastore-definitions/internal";
12
12
  import type { IClient } from "@fluidframework/driver-definitions";
13
13
  import { IQuorumClients, ISequencedClient, ISummaryTree } from "@fluidframework/driver-definitions";
14
- import { ITreeEntry, MessageType, ISequencedDocumentMessage } from "@fluidframework/driver-definitions/internal";
14
+ import { ITreeEntry, ISequencedDocumentMessage, type ISnapshotTree } from "@fluidframework/driver-definitions/internal";
15
15
  import type { IIdCompressor } from "@fluidframework/id-compressor";
16
16
  import type { IIdCompressorCore, IdCreationRange } from "@fluidframework/id-compressor/internal";
17
17
  import { ISummaryTreeWithStats, IGarbageCollectionData, FlushMode, IFluidDataStoreChannel, VisibilityState, type ITelemetryContext, type IRuntimeMessageCollection, type MinimumVersionForCollab } from "@fluidframework/runtime-definitions/internal";
@@ -331,11 +331,6 @@ export declare class MockFluidDataStoreRuntime extends EventEmitter implements I
331
331
  close(): Promise<void>;
332
332
  uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>>;
333
333
  getBlob(blobId: string): Promise<any>;
334
- /**
335
- * @deprecated Use `IFluidDataStoreContext.submitMessage` instead.
336
- * @see https://github.com/microsoft/FluidFramework/issues/24406
337
- */
338
- submitMessage(type: MessageType, content: any): null;
339
334
  private submitMessageInternal;
340
335
  private setChannelDirty;
341
336
  submitSignal(type: string, content: any): null;
@@ -375,12 +370,22 @@ export declare class MockEmptyDeltaConnection implements IDeltaConnection {
375
370
  */
376
371
  export declare class MockObjectStorageService implements IChannelStorageService {
377
372
  private readonly contents;
373
+ private readonly snapshotTree;
374
+ /**
375
+ * @param contents - Key value pairs that represent a snapshot.
376
+ * The keys are the path to the contents of a blob in the snapshot tree. The corresponding values are its contents.
377
+ *
378
+ * @remarks
379
+ * The snapshot contents must not change after it has been passed here as the changes will not be reflected
380
+ * in the snapshot tree retrieved via `getSnapshotTree`.
381
+ */
378
382
  constructor(contents: {
379
383
  [key: string]: string;
380
384
  });
381
385
  readBlob(path: string): Promise<ArrayBufferLike>;
382
386
  contains(path: string): Promise<boolean>;
383
387
  list(path: string): Promise<string[]>;
388
+ getSnapshotTree(): ISnapshotTree;
384
389
  }
385
390
  /**
386
391
  * Mock implementation of IChannelServices
@@ -394,4 +399,12 @@ export declare class MockSharedObjectServices implements IChannelServices {
394
399
  [key: string]: string;
395
400
  });
396
401
  }
402
+ /**
403
+ * Create an ISnapshotTree from contents object (reverse of setContentsFromSummaryTree)
404
+ * @param contents - Object with path/value pairs
405
+ * @returns ISnapshotTree representing the hierarchical structure
406
+ */
407
+ export declare function createSnapshotTreeFromContents(contents: {
408
+ [key: string]: string;
409
+ }): ISnapshotTree;
397
410
  //# sourceMappingURL=mocks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../src/mocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../src/mocks.ts"],"names":[],"mappings":"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"}
package/lib/mocks.js CHANGED
@@ -488,7 +488,10 @@ export class MockQuorumClients {
488
488
  }
489
489
  }
490
490
  getMembers() {
491
- return this.members;
491
+ // Implementation always generates a new Map.
492
+ // Mock should as well in case any callers rely on being able to modify
493
+ // the returned Map.
494
+ return new Map(this.members);
492
495
  }
493
496
  getMember(clientId) {
494
497
  return this.getMembers().get(clientId);
@@ -733,13 +736,6 @@ export class MockFluidDataStoreRuntime extends EventEmitter {
733
736
  async getBlob(blobId) {
734
737
  return null;
735
738
  }
736
- /**
737
- * @deprecated Use `IFluidDataStoreContext.submitMessage` instead.
738
- * @see https://github.com/microsoft/FluidFramework/issues/24406
739
- */
740
- submitMessage(type, content) {
741
- return null;
742
- }
743
739
  submitMessageInternal(messageContent, localOpMetadata) {
744
740
  assert(this.containerRuntime !== undefined, "The container runtime has not been initialized");
745
741
  return this.containerRuntime.submit(messageContent, localOpMetadata);
@@ -883,8 +879,17 @@ export class MockEmptyDeltaConnection {
883
879
  * @legacy @beta
884
880
  */
885
881
  export class MockObjectStorageService {
882
+ /**
883
+ * @param contents - Key value pairs that represent a snapshot.
884
+ * The keys are the path to the contents of a blob in the snapshot tree. The corresponding values are its contents.
885
+ *
886
+ * @remarks
887
+ * The snapshot contents must not change after it has been passed here as the changes will not be reflected
888
+ * in the snapshot tree retrieved via `getSnapshotTree`.
889
+ */
886
890
  constructor(contents) {
887
891
  this.contents = contents;
892
+ this.snapshotTree = createSnapshotTreeFromContents(contents);
888
893
  }
889
894
  async readBlob(path) {
890
895
  return stringToBuffer(this.contents[path], "utf8");
@@ -896,6 +901,9 @@ export class MockObjectStorageService {
896
901
  const pathPartsLength = getNormalizedObjectStoragePathParts(path).length;
897
902
  return Object.keys(this.contents).filter((key) => key.startsWith(path) && key.split("/").length === pathPartsLength + 1);
898
903
  }
904
+ getSnapshotTree() {
905
+ return this.snapshotTree;
906
+ }
899
907
  }
900
908
  /**
901
909
  * Mock implementation of IChannelServices
@@ -930,4 +938,37 @@ function setContentsFromSummaryTree({ tree }, path, contents) {
930
938
  }
931
939
  }
932
940
  }
941
+ /**
942
+ * Create an ISnapshotTree from contents object (reverse of setContentsFromSummaryTree)
943
+ * @param contents - Object with path/value pairs
944
+ * @returns ISnapshotTree representing the hierarchical structure
945
+ */
946
+ export function createSnapshotTreeFromContents(contents) {
947
+ const tree = {
948
+ trees: {},
949
+ blobs: {},
950
+ };
951
+ for (const [path, content] of Object.entries(contents)) {
952
+ // Remove empty strings to handle leading, trailing, or consecutive slashes in the path.
953
+ const pathParts = path.split("/").filter((part) => part !== "");
954
+ let currentTree = tree;
955
+ // Navigate/create the tree structure for all but the last part
956
+ for (let i = 0; i < pathParts.length - 1; i++) {
957
+ const part = pathParts[i];
958
+ if (!currentTree.trees[part]) {
959
+ currentTree.trees[part] = {
960
+ trees: {},
961
+ blobs: {},
962
+ };
963
+ }
964
+ currentTree = currentTree.trees[part];
965
+ }
966
+ // Add the blob at the final location
967
+ const blobName = pathParts[pathParts.length - 1];
968
+ if (blobName !== undefined) {
969
+ currentTree.blobs[blobName] = content;
970
+ }
971
+ }
972
+ return tree;
973
+ }
933
974
  //# sourceMappingURL=mocks.js.map
package/lib/mocks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../src/mocks.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 { EventEmitter, TypedEventEmitter, stringToBuffer } from \"@fluid-internal/client-utils\";\nimport {\n\tAttachState,\n\tIAudience,\n\tIAudienceEvents,\n\tISelf,\n} from \"@fluidframework/container-definitions\";\nimport { ILoader, IAudienceOwner } from \"@fluidframework/container-definitions/internal\";\nimport type { IContainerRuntimeEvents } from \"@fluidframework/container-runtime-definitions/internal\";\nimport {\n\tFluidObject,\n\tIFluidHandle,\n\tIRequest,\n\tIResponse,\n\ttype ITelemetryBaseLogger,\n} from \"@fluidframework/core-interfaces\";\nimport {\n\tIFluidHandleContext,\n\ttype IFluidHandleInternal,\n} from \"@fluidframework/core-interfaces/internal\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tIChannelServices,\n\tIChannelStorageService,\n\tIDeltaConnection,\n\tIDeltaHandler,\n\tIChannel,\n\tIFluidDataStoreRuntime,\n\tIChannelFactory,\n\ttype IDeltaManagerErased,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport type { IClient } from \"@fluidframework/driver-definitions\";\nimport {\n\tIQuorumClients,\n\tISequencedClient,\n\tISummaryTree,\n\tSummaryType,\n} from \"@fluidframework/driver-definitions\";\nimport {\n\tITreeEntry,\n\tMessageType,\n\tISequencedDocumentMessage,\n} from \"@fluidframework/driver-definitions/internal\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\nimport type {\n\tIIdCompressorCore,\n\tIdCreationRange,\n} from \"@fluidframework/id-compressor/internal\";\nimport {\n\tISummaryTreeWithStats,\n\tIGarbageCollectionData,\n\tFlushMode,\n\tIFluidDataStoreChannel,\n\tVisibilityState,\n\ttype ITelemetryContext,\n\ttype IRuntimeMessageCollection,\n\ttype IRuntimeMessagesContent,\n\ttype MinimumVersionForCollab,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport {\n\tgetNormalizedObjectStoragePathParts,\n\tmergeStats,\n\ttoDeltaManagerErased,\n\ttoFluidHandleInternal,\n} from \"@fluidframework/runtime-utils/internal\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils/internal\";\nimport { v4 as uuid } from \"uuid\";\n\nimport { deepFreeze } from \"./deepFreeze.js\";\nimport { MockDeltaManager } from \"./mockDeltas.js\";\nimport { MockHandle } from \"./mockHandle.js\";\n\n/**\n * Mock implementation of IDeltaConnection for testing\n * @legacy @beta\n */\nexport class MockDeltaConnection implements IDeltaConnection {\n\tpublic get connected(): boolean {\n\t\treturn this._connected;\n\t}\n\n\tprivate _connected = true;\n\tpublic handler: IDeltaHandler | undefined;\n\n\tconstructor(\n\t\tprivate readonly submitFn: (messageContent: any, localOpMetadata: unknown) => number,\n\t\tprivate readonly dirtyFn: () => void,\n\t) {}\n\n\tpublic attach(handler: IDeltaHandler): void {\n\t\tthis.handler = handler;\n\t\thandler.setConnectionState(this.connected);\n\t}\n\n\tpublic submit(messageContent: any, localOpMetadata: unknown): number {\n\t\treturn this.submitFn(messageContent, localOpMetadata);\n\t}\n\n\tpublic dirty(): void {\n\t\tthis.dirtyFn();\n\t}\n\n\tpublic setConnectionState(connected: boolean) {\n\t\tthis._connected = connected;\n\t\tthis.handler?.setConnectionState(connected);\n\t}\n\n\tpublic processMessages(messageCollection: IRuntimeMessageCollection) {\n\t\tthis.handler?.processMessages?.(messageCollection);\n\t}\n\n\tpublic reSubmit(content: any, localOpMetadata: unknown, squash?: boolean) {\n\t\tthis.handler?.reSubmit(content, localOpMetadata, squash);\n\t}\n\n\tpublic applyStashedOp(content: any): unknown {\n\t\treturn this.handler?.applyStashedOp(content);\n\t}\n\n\tpublic rollback?(message: any, localOpMetadata: unknown): void {\n\t\tthis.handler?.rollback?.(message, localOpMetadata);\n\t}\n}\n\n// Represents the structure of a pending message stored by the MockContainerRuntime.\n/**\n * @legacy @beta\n */\nexport interface IMockContainerRuntimePendingMessage {\n\tcontent: any;\n\treferenceSequenceNumber: number;\n\tclientSequenceNumber: number;\n\tlocalOpMetadata: unknown;\n}\n\nexport interface IMockContainerRuntimeIdAllocationMessage {\n\ttype: \"idAllocation\";\n\tcontents: IdCreationRange;\n}\n\n/**\n * Options for the container runtime mock.\n * @legacy @beta\n */\nexport interface IMockContainerRuntimeOptions {\n\t/**\n\t * Configures the flush mode for the runtime. In Immediate flush mode the runtime will immediately\n\t * send all operations to the driver layer, while in TurnBased the operations will be buffered\n\t * and then sent them as a single batch when `flush()` is called on the runtime.\n\t *\n\t * By default, flush mode is Immediate.\n\t */\n\treadonly flushMode?: FlushMode;\n\t/**\n\t * If configured, it will simulate group batching by forcing all ops within a batch to have\n\t * the same sequence number.\n\t *\n\t * By default, the value is `false`\n\t */\n\treadonly enableGroupedBatching?: boolean;\n}\n\nconst defaultMockContainerRuntimeOptions: Required<IMockContainerRuntimeOptions> = {\n\tflushMode: FlushMode.Immediate,\n\tenableGroupedBatching: false,\n};\n\nconst makeContainerRuntimeOptions = (\n\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions,\n): Required<IMockContainerRuntimeOptions> => ({\n\t...defaultMockContainerRuntimeOptions,\n\t...mockContainerRuntimeOptions,\n});\n\n/**\n * @legacy @beta\n */\nexport interface IInternalMockRuntimeMessage {\n\tcontent: any;\n\tlocalOpMetadata?: unknown;\n\treferenceSequenceNumber?: number;\n}\n\n/**\n * Mock implementation of IContainerRuntime for testing basic submitting and processing of messages.\n * If test specific logic is required, extend this class and add the logic there. For an example, take a look\n * at MockContainerRuntimeForReconnection.\n * @legacy @beta\n */\nexport class MockContainerRuntime extends TypedEventEmitter<IContainerRuntimeEvents> {\n\tpublic clientId: string;\n\tpublic readonly deltaManager: MockDeltaManager;\n\t/**\n\t * @deprecated use the associated datastore to create the delta connection\n\t */\n\tprotected readonly deltaConnections: MockDeltaConnection[] = [];\n\tprotected readonly pendingMessages: IMockContainerRuntimePendingMessage[] = [];\n\tprotected readonly outbox: IInternalMockRuntimeMessage[] = [];\n\tprivate readonly idAllocationOutbox: IInternalMockRuntimeMessage[] = [];\n\t/**\n\t * The runtime options this instance is using. See {@link IMockContainerRuntimeOptions}.\n\t */\n\tprotected readonly runtimeOptions: Required<IMockContainerRuntimeOptions>;\n\n\tconstructor(\n\t\tprotected readonly dataStoreRuntime: MockFluidDataStoreRuntime,\n\t\tprotected readonly factory: MockContainerRuntimeFactory,\n\t\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions = defaultMockContainerRuntimeOptions,\n\t\tprotected readonly overrides?: { minimumSequenceNumber?: number | undefined },\n\t) {\n\t\tsuper();\n\t\tthis.deltaManager = new MockDeltaManager(() => this.clientId);\n\t\tthis.deltaManager.inbound.on(\"push\", (message: ISequencedDocumentMessage) => {\n\t\t\tthis.factory.pushMessage(message);\n\t\t});\n\n\t\tconst msn = overrides?.minimumSequenceNumber;\n\t\tif (msn !== undefined) {\n\t\t\tthis.deltaManager.lastSequenceNumber = msn;\n\t\t\tthis.deltaManager.minimumSequenceNumber = msn;\n\t\t}\n\t\t// Set FluidDataStoreRuntime's deltaManager to ours so that they are in sync.\n\t\tthis.dataStoreRuntime.deltaManagerInternal = this.deltaManager;\n\t\tthis.dataStoreRuntime.quorum = factory.quorum;\n\t\tthis.dataStoreRuntime.containerRuntime = this;\n\t\t// FluidDataStoreRuntime already creates a clientId, reuse that so they are in sync.\n\t\tthis.clientId = this.dataStoreRuntime.clientId ?? uuid();\n\t\tfactory.quorum.addMember(this.clientId, {});\n\t\tthis.runtimeOptions = makeContainerRuntimeOptions(mockContainerRuntimeOptions);\n\t\tassert(\n\t\t\tthis.runtimeOptions.flushMode !== FlushMode.Immediate ||\n\t\t\t\t!this.runtimeOptions.enableGroupedBatching,\n\t\t\t\"Grouped batching is not compatible with FlushMode.Immediate\",\n\t\t);\n\t}\n\n\t/**\n\t * @deprecated use the associated datastore to create the delta connection\n\t */\n\tpublic createDeltaConnection(): MockDeltaConnection {\n\t\tconst deltaConnection = this.dataStoreRuntime.createDeltaConnection();\n\t\tthis.deltaConnections.push(deltaConnection);\n\t\treturn deltaConnection;\n\t}\n\n\tpublic finalizeIdRange(range: IdCreationRange) {\n\t\tassert(\n\t\t\tthis.dataStoreRuntime.idCompressor !== undefined,\n\t\t\t\"Shouldn't try to finalize IdRanges without an IdCompressor\",\n\t\t);\n\t\tthis.dataStoreRuntime.idCompressor.finalizeCreationRange(range);\n\t}\n\n\t// This enables manual control over flush mode, allowing operations like rollback to be executed in a controlled environment.\n\t#manualFlushCalls: number = 0;\n\n\tpublic async runWithManualFlush(act: () => void | Promise<void>) {\n\t\tthis.#manualFlushCalls++;\n\t\ttry {\n\t\t\tawait act();\n\t\t} finally {\n\t\t\tthis.#manualFlushCalls--;\n\t\t}\n\t}\n\n\tpublic submit(messageContent: any, localOpMetadata?: unknown): number {\n\t\tconst clientSequenceNumber = ++this.deltaManager.clientSequenceNumber;\n\t\tconst message: IInternalMockRuntimeMessage = {\n\t\t\tcontent: messageContent,\n\t\t\tlocalOpMetadata,\n\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t};\n\n\t\tconst isAllocationMessage = this.isAllocationMessage(message.content);\n\n\t\tconst currentFlushMode =\n\t\t\tthis.#manualFlushCalls > 0 ? FlushMode.TurnBased : this.runtimeOptions.flushMode;\n\n\t\tswitch (currentFlushMode) {\n\t\t\tcase FlushMode.Immediate: {\n\t\t\t\tif (!isAllocationMessage) {\n\t\t\t\t\tconst idAllocationOp = this.generateIdAllocationOp();\n\t\t\t\t\tif (idAllocationOp !== undefined) {\n\t\t\t\t\t\tthis.submitInternal(idAllocationOp, clientSequenceNumber);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.submitInternal(message, clientSequenceNumber);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase FlushMode.TurnBased: {\n\t\t\t\t// Id allocation messages are directly submitted during the resubmit path\n\t\t\t\tif (isAllocationMessage) {\n\t\t\t\t\tthis.idAllocationOutbox.push(message);\n\t\t\t\t} else {\n\t\t\t\t\tthis.outbox.push(message);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported FlushMode ${this.runtimeOptions.flushMode}`);\n\t\t}\n\n\t\treturn clientSequenceNumber;\n\t}\n\n\t/**\n\t * If the message is an idAllocation message, it will finalize the id range and return true.\n\t * Otherwise, it will return false.\n\t */\n\tprotected maybeProcessIdAllocationMessage(message: ISequencedDocumentMessage): boolean {\n\t\tif (this.isAllocationMessage(message.contents)) {\n\t\t\tthis.finalizeIdRange(message.contents.contents);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate isAllocationMessage(\n\t\tmessage: any,\n\t): message is IMockContainerRuntimeIdAllocationMessage {\n\t\treturn (\n\t\t\tmessage !== undefined &&\n\t\t\t(message as IMockContainerRuntimeIdAllocationMessage).type === \"idAllocation\"\n\t\t);\n\t}\n\n\tpublic dirty(): void {}\n\tpublic get isDirty() {\n\t\treturn this.pendingMessages.length > 0;\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will send all messages queued since the last time\n\t * this method (or `flushSomeMessages`) was called. Otherwise, calling the method does nothing.\n\t */\n\tpublic flush() {\n\t\tthis.flushSomeMessages(this.outbox.length);\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will send the specified number of messages from the outbox\n\t * queued since the last time this (or `flush`) was called. Otherwise, calling the method does nothing.\n\t * This can be useful when simulating staging mode, and we only want to flush certain messages.\n\t */\n\tpublic flushSomeMessages(numMessages: number): void {\n\t\tif (!Number.isInteger(numMessages) || numMessages < 0) {\n\t\t\tthrow new Error(\"flushSomeMessages: numMessages must be a non-negative integer\");\n\t\t}\n\t\tif (this.runtimeOptions.flushMode !== FlushMode.TurnBased) {\n\t\t\treturn;\n\t\t}\n\n\t\t// This mimics the runtime behavior of the IdCompressor by generating an IdAllocationOp\n\t\t// and sticking it in front of any op that might rely on that id. It differs slightly in that\n\t\t// in the actual runtime it would get put in its own separate batch\n\t\tconst idAllocationOp = this.generateIdAllocationOp();\n\t\tif (idAllocationOp !== undefined) {\n\t\t\tthis.idAllocationOutbox.push(idAllocationOp);\n\t\t}\n\n\t\tconst actualMessagesToSubmit = this.outbox.splice(0, numMessages);\n\n\t\t// As with the runtime behavior, we need to send the idAllocationOps first\n\t\tconst messagesToSubmit = this.idAllocationOutbox.concat(actualMessagesToSubmit);\n\t\tthis.idAllocationOutbox.length = 0;\n\n\t\tlet fakeClientSequenceNumber = 1;\n\t\tmessagesToSubmit.forEach((message) => {\n\t\t\tthis.submitInternal(\n\t\t\t\tmessage,\n\t\t\t\t// When grouped batching is used, the ops within the same grouped batch will have\n\t\t\t\t// fake sequence numbers when they're ungrouped. The submit function will still\n\t\t\t\t// return the clientSequenceNumber but this will ensure that the readers will always\n\t\t\t\t// read the fake client sequence numbers.\n\t\t\t\tthis.runtimeOptions.enableGroupedBatching\n\t\t\t\t\t? fakeClientSequenceNumber++\n\t\t\t\t\t: this.deltaManager.clientSequenceNumber,\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will rebase the current batch by resubmitting them\n\t * to the data stores. Otherwise, calling the method does nothing.\n\t *\n\t * The method requires `runtimeOptions.enableGroupedBatching` to be enabled.\n\t */\n\tpublic rebase() {\n\t\tif (this.runtimeOptions.flushMode !== FlushMode.TurnBased) {\n\t\t\treturn;\n\t\t}\n\n\t\tassert(\n\t\t\tthis.runtimeOptions.enableGroupedBatching,\n\t\t\t\"Rebasing is not supported when group batching is disabled\",\n\t\t);\n\n\t\t// Only outbox needs to be rebased. The idAllocationOutbox is not rebased, as that\n\t\t// is a no-op (though resubmitting the other ops may generate new IDs)\n\t\tconst messagesToRebase = this.outbox.slice();\n\t\tthis.outbox.length = 0;\n\n\t\tthis.reSubmitMessages(messagesToRebase);\n\t}\n\n\tprotected reSubmitMessages(\n\t\tmessagesToResubmit: { content: any; localOpMetadata?: unknown }[],\n\t): void {\n\t\t// Sort the messages so that idAllocation messages are submitted first\n\t\t// When resubmitting non-idAllocation messages, they may generate new IDs.\n\t\t// This sort ensures that all ID ranges are finalized before they are\n\t\t// needed (i.e. before the messages that rely on them are processed)\n\t\t// and in the order they were allocated\n\t\tconst orderedMessages = messagesToResubmit\n\t\t\t.filter((message) => message.content.type === \"idAllocation\")\n\t\t\t.concat(messagesToResubmit.filter((message) => message.content.type !== \"idAllocation\"));\n\t\torderedMessages.forEach((pendingMessage) => {\n\t\t\tif (pendingMessage.content.type === \"idAllocation\") {\n\t\t\t\tthis.submit(pendingMessage.content, pendingMessage.localOpMetadata);\n\t\t\t} else {\n\t\t\t\tthis.dataStoreRuntime.reSubmit(pendingMessage.content, pendingMessage.localOpMetadata);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Rolls back all pending messages.\n\t * @remarks\n\t * This only works when the FlushMode is not immediate as immediate\n\t * flush mode send the ops to the mock runtime factory for processing/sequencing, and so those\n\t * ops are no longer local, so not available for rollback.\n\t */\n\tpublic rollback?(): void {\n\t\tconst messagesToRollback = this.outbox.slice().reverse();\n\t\tthis.outbox.length = 0;\n\t\tmessagesToRollback.forEach((pm) => {\n\t\t\tthis.dataStoreRuntime.rollback?.(pm.content, pm.localOpMetadata);\n\t\t});\n\t}\n\n\tprivate generateIdAllocationOp(): IInternalMockRuntimeMessage | undefined {\n\t\tconst idRange = this.dataStoreRuntime.idCompressor?.takeNextCreationRange();\n\t\tif (idRange?.ids !== undefined) {\n\t\t\tconst allocationOp: IMockContainerRuntimeIdAllocationMessage = {\n\t\t\t\ttype: \"idAllocation\",\n\t\t\t\tcontents: idRange,\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tcontent: allocationOp,\n\t\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate submitInternal(message: IInternalMockRuntimeMessage, clientSequenceNumber: number) {\n\t\t// Here, we should instead push to the DeltaManager. And the DeltaManager will push things into the factory's messages\n\t\tthis.deltaManager.outbound.push([\n\t\t\t{\n\t\t\t\tclientSequenceNumber,\n\t\t\t\tcontents: message.content,\n\t\t\t\treferenceSequenceNumber:\n\t\t\t\t\tmessage.referenceSequenceNumber ?? this.deltaManager.lastSequenceNumber,\n\t\t\t\ttype: MessageType.Operation,\n\t\t\t},\n\t\t]);\n\t\tthis.addPendingMessage(message.content, message.localOpMetadata, clientSequenceNumber);\n\t}\n\n\tpublic process(message: ISequencedDocumentMessage) {\n\t\tthis.deltaManager.process(message);\n\t\tconst [local, localOpMetadata] = this.processInternal(message);\n\n\t\tif (this.isAllocationMessage(message.contents)) {\n\t\t\tthis.finalizeIdRange(message.contents.contents);\n\t\t} else {\n\t\t\tconst messagesContent: IRuntimeMessagesContent[] = [\n\t\t\t\t{\n\t\t\t\t\tcontents: message.contents,\n\t\t\t\t\tclientSequenceNumber: message.clientSequenceNumber,\n\t\t\t\t\tlocalOpMetadata,\n\t\t\t\t},\n\t\t\t];\n\t\t\tthis.dataStoreRuntime.processMessages({ envelope: message, local, messagesContent });\n\t\t}\n\t}\n\n\tprotected addPendingMessage(\n\t\tcontent: any,\n\t\tlocalOpMetadata: unknown,\n\t\tclientSequenceNumber: number,\n\t) {\n\t\tconst pendingMessage: IMockContainerRuntimePendingMessage = {\n\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t\tcontent,\n\t\t\tclientSequenceNumber,\n\t\t\tlocalOpMetadata,\n\t\t};\n\t\tthis.pendingMessages.push(pendingMessage);\n\t}\n\n\tprotected processInternal(message: ISequencedDocumentMessage): [boolean, unknown] {\n\t\tlet localOpMetadata: unknown;\n\t\tconst local = this.clientId === message.clientId;\n\t\tif (local) {\n\t\t\tconst pendingMessage = this.pendingMessages.shift();\n\t\t\tassert(\n\t\t\t\tpendingMessage?.clientSequenceNumber === message.clientSequenceNumber,\n\t\t\t\t\"Unexpected message\",\n\t\t\t);\n\t\t\tlocalOpMetadata = pendingMessage.localOpMetadata;\n\t\t}\n\t\treturn [local, localOpMetadata];\n\t}\n\n\tpublic async resolveHandle(handle: IFluidHandle) {\n\t\treturn this.dataStoreRuntime.resolveHandle({\n\t\t\turl: toFluidHandleInternal(handle).absolutePath,\n\t\t});\n\t}\n}\n\n/**\n * Factory to create MockContainerRuntime for testing basic submitting and processing of messages.\n * This also acts as a very basic server that stores the messages from all the MockContainerRuntimes and\n * processes them when asked.\n * If test specific logic is required, extend this class and add the logic there. For an example, take a look\n * at MockContainerRuntimeFactoryForReconnection.\n * @legacy @beta\n */\nexport class MockContainerRuntimeFactory {\n\tpublic sequenceNumber = 0;\n\tpublic minSeq = new Map<string, number>();\n\tpublic readonly quorum = new MockQuorumClients();\n\t/**\n\t * The MockContainerRuntimes we produce will push messages into this queue as they are submitted.\n\t * This is playing the role of the orderer, establishing a single universal order for the messages generated.\n\t * They are held in this queue until we explicitly choose to process them, at which time they are \"broadcast\" to\n\t * each of the runtimes.\n\t */\n\tprotected messages: ISequencedDocumentMessage[] = [];\n\tprotected readonly runtimes: Set<MockContainerRuntime> = new Set();\n\n\t/**\n\t * The container runtime options which will be provided to the all runtimes\n\t * created by this factory and also drive the way the ops are processed.\n\t *\n\t * See {@link IMockContainerRuntimeOptions}\n\t */\n\tprotected readonly runtimeOptions: Required<IMockContainerRuntimeOptions>;\n\n\tconstructor(\n\t\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions = defaultMockContainerRuntimeOptions,\n\t) {\n\t\tthis.runtimeOptions = makeContainerRuntimeOptions(mockContainerRuntimeOptions);\n\t}\n\n\tpublic get outstandingMessageCount() {\n\t\treturn this.messages.length;\n\t}\n\n\t/**\n\t * @returns a minimum sequence number for all connected clients.\n\t */\n\tpublic getMinSeq(): number {\n\t\tlet minimumSequenceNumber: number | undefined;\n\t\tfor (const [client, clientSequenceNumber] of this.minSeq) {\n\t\t\t// We have to make sure, a client is part of the quorum, when\n\t\t\t// we compute the msn. We assume that the quorum accurately\n\t\t\t// represents the currently connected clients. In some tests\n\t\t\t// for reconnects, we will remove clients from the quorum\n\t\t\t// to indicate they are currently not connected. In that case,\n\t\t\t// they must no longer contribute to the msn computation.\n\t\t\tif (this.quorum.getMember(client) !== undefined) {\n\t\t\t\tminimumSequenceNumber =\n\t\t\t\t\tminimumSequenceNumber === undefined\n\t\t\t\t\t\t? clientSequenceNumber\n\t\t\t\t\t\t: Math.min(minimumSequenceNumber, clientSequenceNumber);\n\t\t\t}\n\t\t}\n\t\treturn minimumSequenceNumber ?? 0;\n\t}\n\n\tpublic createContainerRuntime(\n\t\tdataStoreRuntime: MockFluidDataStoreRuntime,\n\t): MockContainerRuntime {\n\t\tconst containerRuntime = new MockContainerRuntime(\n\t\t\tdataStoreRuntime,\n\t\t\tthis,\n\t\t\tthis.runtimeOptions,\n\t\t);\n\t\tthis.runtimes.add(containerRuntime);\n\t\treturn containerRuntime;\n\t}\n\n\tpublic removeContainerRuntime(containerRuntime: MockContainerRuntime) {\n\t\tthis.runtimes.delete(containerRuntime);\n\t}\n\n\tpublic pushMessage(msg: Partial<ISequencedDocumentMessage>) {\n\t\tdeepFreeze(msg);\n\t\tif (\n\t\t\tmsg.clientId &&\n\t\t\tmsg.referenceSequenceNumber !== undefined &&\n\t\t\t!this.minSeq.has(msg.clientId)\n\t\t) {\n\t\t\tthis.minSeq.set(msg.clientId, msg.referenceSequenceNumber);\n\t\t}\n\t\tthis.messages.push(msg as ISequencedDocumentMessage);\n\t}\n\n\tprotected lastProcessedMessage: ISequencedDocumentMessage | undefined;\n\tprotected getFirstMessageToProcess() {\n\t\tassert(this.messages.length > 0, \"The message queue should not be empty\");\n\n\t\t// Explicitly JSON clone the value to match the behavior of going thru the wire.\n\t\tconst message = JSON.parse(\n\t\t\tJSON.stringify(this.messages.shift()),\n\t\t) as ISequencedDocumentMessage;\n\n\t\t// TODO: Determine if this needs to be adapted for handling server-generated messages (which have null clientId and referenceSequenceNumber of -1).\n\t\tthis.minSeq.set(message.clientId as string, message.referenceSequenceNumber);\n\t\tif (\n\t\t\tthis.runtimeOptions.flushMode === FlushMode.Immediate ||\n\t\t\tthis.lastProcessedMessage?.clientId !== message.clientId\n\t\t) {\n\t\t\tthis.sequenceNumber++;\n\t\t}\n\t\tmessage.sequenceNumber = this.sequenceNumber;\n\t\tmessage.minimumSequenceNumber = this.getMinSeq();\n\t\tthis.lastProcessedMessage = message;\n\t\treturn message;\n\t}\n\n\tprivate processFirstMessage() {\n\t\tconst message = this.getFirstMessageToProcess();\n\t\tfor (const runtime of this.runtimes) {\n\t\t\truntime.process(message);\n\t\t}\n\t}\n\n\t/**\n\t * Process one of the queued messages. Throws if no messages are queued.\n\t */\n\tpublic processOneMessage() {\n\t\tif (this.messages.length === 0) {\n\t\t\tthrow new Error(\"Tried to process a message that did not exist\");\n\t\t}\n\t\tthis.lastProcessedMessage = undefined;\n\n\t\tthis.processFirstMessage();\n\t}\n\n\t/**\n\t * Process a given number of queued messages. Throws if there are fewer messages queued than requested.\n\t * @param count - the number of messages to process\n\t */\n\tpublic processSomeMessages(count: number) {\n\t\tif (count > this.messages.length) {\n\t\t\tthrow new Error(\"Tried to process more messages than exist\");\n\t\t}\n\n\t\tthis.lastProcessedMessage = undefined;\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tthis.processFirstMessage();\n\t\t}\n\t}\n\n\t/**\n\t * Process all remaining messages in the queue.\n\t */\n\tpublic processAllMessages() {\n\t\tthis.lastProcessedMessage = undefined;\n\t\twhile (this.messages.length > 0) {\n\t\t\tthis.processFirstMessage();\n\t\t}\n\t}\n}\n\n/**\n * @legacy @beta\n */\nexport class MockQuorumClients implements IQuorumClients, EventEmitter {\n\tprivate readonly members: Map<string, ISequencedClient>;\n\tprivate readonly eventEmitter = new EventEmitter();\n\n\tconstructor(...members: [string, Partial<ISequencedClient>][]) {\n\t\tthis.members = new Map((members as [string, ISequencedClient][]) ?? []);\n\t}\n\n\taddMember(id: string, client: Partial<ISequencedClient>) {\n\t\tthis.members.set(id, client as ISequencedClient);\n\t\tthis.eventEmitter.emit(\"addMember\", id, client);\n\t}\n\n\tremoveMember(id: string) {\n\t\tif (this.members.delete(id)) {\n\t\t\tthis.eventEmitter.emit(\"removeMember\", id);\n\t\t}\n\t}\n\n\tgetMembers(): Map<string, ISequencedClient> {\n\t\treturn this.members;\n\t}\n\tgetMember(clientId: string): ISequencedClient | undefined {\n\t\treturn this.getMembers().get(clientId);\n\t}\n\tdisposed: boolean = false;\n\n\tdispose(): void {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\n\taddListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\ton(event: string | number, listener: (...args: any[]) => void): this {\n\t\tswitch (event) {\n\t\t\tcase \"afterOn\":\n\t\t\t\tthis.eventEmitter.on(event, listener);\n\t\t\t\treturn this;\n\n\t\t\tcase \"addMember\":\n\t\t\tcase \"removeMember\":\n\t\t\t\tthis.eventEmitter.on(event, listener);\n\t\t\t\tthis.eventEmitter.emit(\"afterOn\", event);\n\t\t\t\treturn this;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Method not implemented.\");\n\t\t}\n\t}\n\tonce(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tprependListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tprependOnceListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tremoveListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthis.eventEmitter.removeListener(event, listener);\n\t\treturn this;\n\t}\n\toff(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthis.eventEmitter.off(event, listener);\n\t\treturn this;\n\t}\n\tremoveAllListeners(event?: string | number | undefined): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tsetMaxListeners(n: number): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tgetMaxListeners(): number {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tlisteners(event: string | number): ReturnType<EventEmitter[\"listeners\"]> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\trawListeners(event: string | number): ReturnType<EventEmitter[\"rawListeners\"]> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\temit(event: string | number, ...args: any[]): boolean {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\teventNames(): (string | number)[] {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tlistenerCount(type: string | number): number {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n}\n\n/**\n * @legacy @beta\n */\nexport class MockAudience\n\textends TypedEventEmitter<IAudienceEvents>\n\timplements IAudienceOwner\n{\n\tprivate readonly audienceMembers: Map<string, IClient>;\n\tprivate _currentClientId: string | undefined;\n\n\tpublic constructor() {\n\t\tsuper();\n\t\tthis.audienceMembers = new Map<string, IClient>();\n\t}\n\n\tpublic addMember(clientId: string, member: IClient): void {\n\t\tthis.audienceMembers.set(clientId, member);\n\t\tthis.emit(\"addMember\", clientId, member);\n\t}\n\n\tpublic removeMember(clientId: string): boolean {\n\t\tconst member = this.audienceMembers.get(clientId);\n\t\tconst deleteResult = this.audienceMembers.delete(clientId);\n\t\tthis.emit(\"removeMember\", clientId, member);\n\t\treturn deleteResult;\n\t}\n\n\tpublic getMembers(): Map<string, IClient> {\n\t\treturn new Map<string, IClient>(this.audienceMembers.entries());\n\t}\n\tpublic getMember(clientId: string): IClient | undefined {\n\t\treturn this.audienceMembers.get(clientId);\n\t}\n\n\tpublic getSelf(): ISelf | undefined {\n\t\treturn this._currentClientId === undefined\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tclientId: this._currentClientId,\n\t\t\t\t};\n\t}\n\n\tpublic setCurrentClientId(clientId: string): void {\n\t\tif (this._currentClientId !== clientId) {\n\t\t\tconst oldId = this._currentClientId;\n\t\t\tthis._currentClientId = clientId;\n\t\t\tthis.emit(\n\t\t\t\t\"selfChanged\",\n\t\t\t\toldId === undefined ? undefined : ({ clientId: oldId } satisfies ISelf),\n\t\t\t\t{ clientId } satisfies ISelf,\n\t\t\t);\n\t\t}\n\t}\n}\n\nconst attachStatesToComparableNumbers = {\n\t[AttachState.Detached]: 0,\n\t[AttachState.Attaching]: 1,\n\t[AttachState.Attached]: 2,\n} as const;\n\n/**\n * Mock implementation of IRuntime for testing that does nothing\n * @legacy @beta\n */\nexport class MockFluidDataStoreRuntime\n\textends EventEmitter\n\timplements IFluidDataStoreRuntime, IFluidDataStoreChannel, IFluidHandleContext\n{\n\tconstructor(overrides?: {\n\t\tclientId?: string;\n\t\tentryPoint?: IFluidHandle<FluidObject>;\n\t\tid?: string;\n\t\tlogger?: ITelemetryBaseLogger;\n\t\tidCompressor?: IIdCompressor & IIdCompressorCore;\n\t\tattachState?: AttachState;\n\t\tregistry?: readonly IChannelFactory[];\n\t\tminVersionForCollab?: MinimumVersionForCollab;\n\t}) {\n\t\tsuper();\n\t\tthis.clientId = overrides?.clientId ?? uuid();\n\t\tthis.entryPoint = toFluidHandleInternal(\n\t\t\toverrides?.entryPoint ?? new MockHandle(null as unknown as FluidObject, \"\", \"\"),\n\t\t);\n\t\tthis.id = overrides?.id ?? uuid();\n\t\tconst childLoggerProps: Parameters<typeof createChildLogger>[0] = {\n\t\t\tnamespace: \"fluid:MockFluidDataStoreRuntime\",\n\t\t};\n\t\tconst logger = overrides?.logger;\n\t\tif (logger !== undefined) {\n\t\t\tchildLoggerProps.logger = logger;\n\t\t}\n\t\tthis.logger = createChildLogger(childLoggerProps);\n\t\tthis.idCompressor = overrides?.idCompressor;\n\t\tthis._attachState = overrides?.attachState ?? AttachState.Attached;\n\n\t\tconst registry = overrides?.registry;\n\t\tif (registry) {\n\t\t\tthis.registry = new Map(registry.map((factory) => [factory.type, factory]));\n\t\t}\n\n\t\tthis.minVersionForCollab = overrides?.minVersionForCollab;\n\t}\n\n\tprivate readonly: boolean = false;\n\tpublic readonly isReadOnly = () => this.readonly;\n\n\tpublic readonly entryPoint: IFluidHandleInternal<FluidObject>;\n\n\t/**\n\t * @see IFluidDataStoreRuntimeInternalConfig.minVersionForCollab\n\t */\n\tpublic readonly minVersionForCollab: MinimumVersionForCollab | undefined;\n\n\tpublic get IFluidHandleContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get rootRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get channelsRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get objectsRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\n\tpublic readonly documentId: string = undefined as any;\n\tpublic readonly id: string;\n\tpublic readonly existing: boolean = undefined as any;\n\tpublic options: Record<string | number, any> = {};\n\tpublic clientId: string;\n\tpublic readonly path = \"\";\n\tpublic readonly connected = true;\n\tpublic deltaManagerInternal = new MockDeltaManager();\n\tpublic get deltaManager(): IDeltaManagerErased {\n\t\treturn toDeltaManagerErased(this.deltaManagerInternal);\n\t}\n\tpublic readonly loader: ILoader = undefined as any;\n\tpublic readonly logger: ITelemetryBaseLogger;\n\tpublic quorum = new MockQuorumClients();\n\tprivate readonly audience = new MockAudience();\n\tpublic containerRuntime?: MockContainerRuntime;\n\tpublic idCompressor: (IIdCompressor & IIdCompressorCore) | undefined;\n\tprivate readonly deltaConnections: MockDeltaConnection[] = [];\n\tprivate readonly registry?: ReadonlyMap<string, IChannelFactory>;\n\n\tpublic createDeltaConnection(): MockDeltaConnection {\n\t\tconst deltaConnection = new MockDeltaConnection(\n\t\t\t(messageContent: any, localOpMetadata: unknown) =>\n\t\t\t\tthis.submitMessageInternal(messageContent, localOpMetadata),\n\t\t\t() => this.setChannelDirty(),\n\t\t);\n\t\tthis.deltaConnections.push(deltaConnection);\n\t\treturn deltaConnection;\n\t}\n\n\tpublic get absolutePath() {\n\t\treturn `/${this.id}`;\n\t}\n\n\t/**\n\t * @deprecated Use `attachState` instead\n\t *\n\t * @privateRemarks Also remove the setter when this is removed. setters don't get their own doc tags.\n\t */\n\tpublic get local(): boolean {\n\t\treturn !this.isAttached;\n\t}\n\tpublic set local(local: boolean) {\n\t\t// this does not validate attach state orders, or fire events to maintain\n\t\t// the existing behavior. due to this, this method is deprecated and will\n\t\t// be removed\n\t\tthis._attachState = local ? AttachState.Detached : AttachState.Attached;\n\t}\n\n\tprivate _disposed = false;\n\n\tpublic get disposed() {\n\t\treturn this._disposed;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._disposed = true;\n\t}\n\n\tpublic async getChannel(id: string): Promise<IChannel> {\n\t\treturn null as any as IChannel;\n\t}\n\tpublic createChannel(id: string | undefined, type: string): IChannel {\n\t\tif (this.registry === undefined) {\n\t\t\t// This preserves the behavior of this mock from before registry support was added.\n\t\t\treturn null as any as IChannel;\n\t\t}\n\n\t\tconst factory = this.registry.get(type);\n\t\tassert(factory !== undefined, \"type missing from registry\");\n\t\treturn factory.create(this, id ?? uuid());\n\t}\n\n\t/**\n\t * @remarks This is for internal use only.\n\t */\n\tpublic ILayerCompatDetails?: unknown;\n\n\tpublic addChannel(channel: IChannel): void {}\n\n\tpublic get isAttached(): boolean {\n\t\treturn this.attachState !== AttachState.Detached;\n\t}\n\n\tprivate _attachState: AttachState;\n\tpublic get attachState(): AttachState {\n\t\treturn this._attachState;\n\t}\n\n\tpublic get visibilityState(): VisibilityState {\n\t\treturn this.isAttached ? VisibilityState.GloballyVisible : VisibilityState.NotVisible;\n\t}\n\n\tpublic bindChannel(channel: IChannel): void {\n\t\treturn;\n\t}\n\n\tpublic attachGraph(): void {\n\t\treturn;\n\t}\n\n\tpublic makeVisibleAndAttachGraph(): void {\n\t\treturn;\n\t}\n\n\tpublic bind(handle: IFluidHandle): void {\n\t\treturn;\n\t}\n\n\tpublic getQuorum(): IQuorumClients {\n\t\treturn this.quorum;\n\t}\n\n\tpublic getAudience(): IAudience {\n\t\treturn this.audience;\n\t}\n\n\tpublic save(message: string) {\n\t\treturn;\n\t}\n\n\tpublic async close(): Promise<void> {\n\t\treturn;\n\t}\n\n\tpublic async uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>> {\n\t\treturn null as any as IFluidHandle<ArrayBufferLike>;\n\t}\n\n\tpublic async getBlob(blobId: string): Promise<any> {\n\t\treturn null;\n\t}\n\n\t/**\n\t * @deprecated Use `IFluidDataStoreContext.submitMessage` instead.\n\t * @see https://github.com/microsoft/FluidFramework/issues/24406\n\t */\n\tpublic submitMessage(type: MessageType, content: any) {\n\t\treturn null;\n\t}\n\n\tprivate submitMessageInternal(messageContent: any, localOpMetadata: unknown): number {\n\t\tassert(\n\t\t\tthis.containerRuntime !== undefined,\n\t\t\t\"The container runtime has not been initialized\",\n\t\t);\n\t\treturn this.containerRuntime.submit(messageContent, localOpMetadata);\n\t}\n\n\tprivate setChannelDirty(): void {\n\t\tassert(\n\t\t\tthis.containerRuntime !== undefined,\n\t\t\t\"The container runtime has not been initialized\",\n\t\t);\n\t\treturn this.containerRuntime.dirty();\n\t}\n\n\tpublic submitSignal(type: string, content: any) {\n\t\treturn null;\n\t}\n\n\tpublic processMessages(messageCollection: IRuntimeMessageCollection) {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.processMessages(messageCollection);\n\t\t});\n\t}\n\n\tpublic processSignal(message: any, local: boolean) {\n\t\treturn;\n\t}\n\n\tpublic updateMinSequenceNumber(value: number): void {\n\t\treturn;\n\t}\n\n\tpublic setConnectionState(connected: boolean, clientId?: string) {\n\t\tif (connected && clientId !== undefined) {\n\t\t\tthis.clientId = clientId;\n\t\t}\n\t\tthis.deltaConnections.forEach((dc) => dc.setConnectionState(connected));\n\t\treturn;\n\t}\n\n\tpublic notifyReadOnlyState(readonly: boolean): void {\n\t\tthis.readonly = readonly;\n\t}\n\n\tpublic async resolveHandle(request: IRequest): Promise<IResponse> {\n\t\tif (request.url !== undefined) {\n\t\t\treturn {\n\t\t\t\tstatus: 200,\n\t\t\t\tmimeType: \"fluid/object\",\n\t\t\t\tvalue: request.url,\n\t\t\t};\n\t\t}\n\t\treturn this.request(request);\n\t}\n\n\tpublic async request(request: IRequest): Promise<IResponse> {\n\t\treturn null as any as IResponse;\n\t}\n\n\tpublic async summarize(\n\t\tfullTree?: boolean,\n\t\ttrackState?: boolean,\n\t): Promise<ISummaryTreeWithStats> {\n\t\tconst stats = mergeStats();\n\t\tstats.treeNodeCount++;\n\t\treturn {\n\t\t\tsummary: {\n\t\t\t\ttype: SummaryType.Tree,\n\t\t\t\ttree: {},\n\t\t\t},\n\t\t\tstats,\n\t\t};\n\t}\n\n\tpublic async getGCData(): Promise<IGarbageCollectionData> {\n\t\treturn {\n\t\t\tgcNodes: {},\n\t\t};\n\t}\n\n\tpublic updateUsedRoutes(usedRoutes: string[]) {}\n\n\tpublic getAttachSnapshot(): ITreeEntry[] {\n\t\treturn [];\n\t}\n\n\tpublic getAttachSummary(): ISummaryTreeWithStats {\n\t\tconst stats = mergeStats();\n\t\tstats.treeNodeCount++;\n\t\treturn {\n\t\t\tsummary: {\n\t\t\t\ttype: SummaryType.Tree,\n\t\t\t\ttree: {},\n\t\t\t},\n\t\t\tstats,\n\t\t};\n\t}\n\n\tpublic getAttachGCData(\n\t\ttelemetryContext?: ITelemetryContext | undefined,\n\t): IGarbageCollectionData {\n\t\treturn {\n\t\t\tgcNodes: {},\n\t\t};\n\t}\n\n\tpublic setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void {\n\t\tif (attachState === this._attachState) {\n\t\t\treturn;\n\t\t}\n\t\tconst proposedState = attachStatesToComparableNumbers[attachState];\n\t\tconst startingState = attachStatesToComparableNumbers[this._attachState];\n\t\tif (proposedState < startingState) {\n\t\t\tthrow new Error(`cannot transition back to ${attachState} from ${this.attachState}`);\n\t\t}\n\n\t\tif (\n\t\t\tstartingState < attachStatesToComparableNumbers[AttachState.Attaching] &&\n\t\t\tproposedState >= attachStatesToComparableNumbers[AttachState.Attaching]\n\t\t) {\n\t\t\tthis._attachState = AttachState.Attaching;\n\t\t\tthis.emit(\"attaching\");\n\t\t}\n\n\t\tif (\n\t\t\tstartingState < attachStatesToComparableNumbers[AttachState.Attached] &&\n\t\t\tproposedState >= attachStatesToComparableNumbers[AttachState.Attached]\n\t\t) {\n\t\t\tthis._attachState = AttachState.Attached;\n\t\t\tthis.emit(\"attached\");\n\t\t}\n\t}\n\n\tpublic async waitAttached(): Promise<void> {\n\t\treturn;\n\t}\n\n\tpublic async requestDataStore(request: IRequest): Promise<IResponse> {\n\t\treturn null as any as IResponse;\n\t}\n\n\tpublic reSubmit(content: any, localOpMetadata: unknown, squash?: boolean) {\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.reSubmit(content, localOpMetadata, squash);\n\t\t});\n\t}\n\n\tpublic async applyStashedOp(content: any) {\n\t\treturn this.deltaConnections.map((dc) => dc.applyStashedOp(content))[0];\n\t}\n\n\tpublic rollback?(message: any, localOpMetadata: unknown): void {\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.rollback?.(message, localOpMetadata);\n\t\t});\n\t}\n}\n\n/**\n * Mock implementation of IDeltaConnection\n * @internal\n */\nexport class MockEmptyDeltaConnection implements IDeltaConnection {\n\tpublic connected = false;\n\n\tpublic attach(handler) {}\n\n\tpublic submit(messageContent: any): number {\n\t\tassert(false, \"Throw submit error on mock empty delta connection\");\n\t}\n\n\tpublic dirty(): void {}\n}\n\n/**\n * Mock implementation of IChannelStorageService\n * @legacy @beta\n */\nexport class MockObjectStorageService implements IChannelStorageService {\n\tpublic constructor(private readonly contents: { [key: string]: string }) {}\n\n\tpublic async readBlob(path: string): Promise<ArrayBufferLike> {\n\t\treturn stringToBuffer(this.contents[path], \"utf8\");\n\t}\n\n\tpublic async contains(path: string): Promise<boolean> {\n\t\treturn this.contents[path] !== undefined;\n\t}\n\n\tpublic async list(path: string): Promise<string[]> {\n\t\tconst pathPartsLength = getNormalizedObjectStoragePathParts(path).length;\n\t\treturn Object.keys(this.contents).filter(\n\t\t\t(key) => key.startsWith(path) && key.split(\"/\").length === pathPartsLength + 1,\n\t\t);\n\t}\n}\n\n/**\n * Mock implementation of IChannelServices\n * @legacy @beta\n */\nexport class MockSharedObjectServices implements IChannelServices {\n\tpublic static createFromSummary(summaryTree: ISummaryTree) {\n\t\tconst contents: { [key: string]: string } = {};\n\t\tsetContentsFromSummaryTree(summaryTree, \"\", contents);\n\t\treturn new MockSharedObjectServices(contents);\n\t}\n\n\tpublic deltaConnection: IDeltaConnection = new MockEmptyDeltaConnection();\n\tpublic objectStorage: MockObjectStorageService;\n\n\tpublic constructor(contents: { [key: string]: string }) {\n\t\tthis.objectStorage = new MockObjectStorageService(contents);\n\t}\n}\n\n/**\n * Populate the given `contents` object with all paths/values in a summary tree\n */\nfunction setContentsFromSummaryTree(\n\t{ tree }: ISummaryTree,\n\tpath: string,\n\tcontents: { [key: string]: string },\n): void {\n\tfor (const [key, value] of Object.entries(tree)) {\n\t\tswitch (value.type) {\n\t\t\tcase SummaryType.Blob:\n\t\t\t\tassert(\n\t\t\t\t\ttypeof value.content === \"string\",\n\t\t\t\t\t\"Unexpected blob value on mock createFromSummary\",\n\t\t\t\t);\n\t\t\t\tcontents[`${path}${key}`] = value.content;\n\t\t\t\tbreak;\n\t\t\tcase SummaryType.Tree:\n\t\t\t\tsetContentsFromSummaryTree(value, `${path}${key}/`, contents);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tassert(false, \"Unexpected summary type on mock createFromSummary\");\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../src/mocks.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 { EventEmitter, TypedEventEmitter, stringToBuffer } from \"@fluid-internal/client-utils\";\nimport {\n\tAttachState,\n\tIAudience,\n\tIAudienceEvents,\n\tISelf,\n} from \"@fluidframework/container-definitions\";\nimport { ILoader, IAudienceOwner } from \"@fluidframework/container-definitions/internal\";\nimport type { IContainerRuntimeEvents } from \"@fluidframework/container-runtime-definitions/internal\";\nimport {\n\tFluidObject,\n\tIFluidHandle,\n\tIRequest,\n\tIResponse,\n\ttype ITelemetryBaseLogger,\n} from \"@fluidframework/core-interfaces\";\nimport {\n\tIFluidHandleContext,\n\ttype IFluidHandleInternal,\n} from \"@fluidframework/core-interfaces/internal\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tIChannelServices,\n\tIChannelStorageService,\n\tIDeltaConnection,\n\tIDeltaHandler,\n\tIChannel,\n\tIFluidDataStoreRuntime,\n\tIChannelFactory,\n\ttype IDeltaManagerErased,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport type { IClient } from \"@fluidframework/driver-definitions\";\nimport {\n\tIQuorumClients,\n\tISequencedClient,\n\tISummaryTree,\n\tSummaryType,\n} from \"@fluidframework/driver-definitions\";\nimport {\n\tITreeEntry,\n\tMessageType,\n\tISequencedDocumentMessage,\n\ttype ISnapshotTree,\n} from \"@fluidframework/driver-definitions/internal\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\nimport type {\n\tIIdCompressorCore,\n\tIdCreationRange,\n} from \"@fluidframework/id-compressor/internal\";\nimport {\n\tISummaryTreeWithStats,\n\tIGarbageCollectionData,\n\tFlushMode,\n\tIFluidDataStoreChannel,\n\tVisibilityState,\n\ttype ITelemetryContext,\n\ttype IRuntimeMessageCollection,\n\ttype IRuntimeMessagesContent,\n\ttype MinimumVersionForCollab,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport {\n\tgetNormalizedObjectStoragePathParts,\n\tmergeStats,\n\ttoDeltaManagerErased,\n\ttoFluidHandleInternal,\n} from \"@fluidframework/runtime-utils/internal\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils/internal\";\nimport { v4 as uuid } from \"uuid\";\n\nimport { deepFreeze } from \"./deepFreeze.js\";\nimport { MockDeltaManager } from \"./mockDeltas.js\";\nimport { MockHandle } from \"./mockHandle.js\";\n\n/**\n * Mock implementation of IDeltaConnection for testing\n * @legacy @beta\n */\nexport class MockDeltaConnection implements IDeltaConnection {\n\tpublic get connected(): boolean {\n\t\treturn this._connected;\n\t}\n\n\tprivate _connected = true;\n\tpublic handler: IDeltaHandler | undefined;\n\n\tconstructor(\n\t\tprivate readonly submitFn: (messageContent: any, localOpMetadata: unknown) => number,\n\t\tprivate readonly dirtyFn: () => void,\n\t) {}\n\n\tpublic attach(handler: IDeltaHandler): void {\n\t\tthis.handler = handler;\n\t\thandler.setConnectionState(this.connected);\n\t}\n\n\tpublic submit(messageContent: any, localOpMetadata: unknown): number {\n\t\treturn this.submitFn(messageContent, localOpMetadata);\n\t}\n\n\tpublic dirty(): void {\n\t\tthis.dirtyFn();\n\t}\n\n\tpublic setConnectionState(connected: boolean) {\n\t\tthis._connected = connected;\n\t\tthis.handler?.setConnectionState(connected);\n\t}\n\n\tpublic processMessages(messageCollection: IRuntimeMessageCollection) {\n\t\tthis.handler?.processMessages?.(messageCollection);\n\t}\n\n\tpublic reSubmit(content: any, localOpMetadata: unknown, squash?: boolean) {\n\t\tthis.handler?.reSubmit(content, localOpMetadata, squash);\n\t}\n\n\tpublic applyStashedOp(content: any): unknown {\n\t\treturn this.handler?.applyStashedOp(content);\n\t}\n\n\tpublic rollback?(message: any, localOpMetadata: unknown): void {\n\t\tthis.handler?.rollback?.(message, localOpMetadata);\n\t}\n}\n\n// Represents the structure of a pending message stored by the MockContainerRuntime.\n/**\n * @legacy @beta\n */\nexport interface IMockContainerRuntimePendingMessage {\n\tcontent: any;\n\treferenceSequenceNumber: number;\n\tclientSequenceNumber: number;\n\tlocalOpMetadata: unknown;\n}\n\nexport interface IMockContainerRuntimeIdAllocationMessage {\n\ttype: \"idAllocation\";\n\tcontents: IdCreationRange;\n}\n\n/**\n * Options for the container runtime mock.\n * @legacy @beta\n */\nexport interface IMockContainerRuntimeOptions {\n\t/**\n\t * Configures the flush mode for the runtime. In Immediate flush mode the runtime will immediately\n\t * send all operations to the driver layer, while in TurnBased the operations will be buffered\n\t * and then sent them as a single batch when `flush()` is called on the runtime.\n\t *\n\t * By default, flush mode is Immediate.\n\t */\n\treadonly flushMode?: FlushMode;\n\t/**\n\t * If configured, it will simulate group batching by forcing all ops within a batch to have\n\t * the same sequence number.\n\t *\n\t * By default, the value is `false`\n\t */\n\treadonly enableGroupedBatching?: boolean;\n}\n\nconst defaultMockContainerRuntimeOptions: Required<IMockContainerRuntimeOptions> = {\n\tflushMode: FlushMode.Immediate,\n\tenableGroupedBatching: false,\n};\n\nconst makeContainerRuntimeOptions = (\n\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions,\n): Required<IMockContainerRuntimeOptions> => ({\n\t...defaultMockContainerRuntimeOptions,\n\t...mockContainerRuntimeOptions,\n});\n\n/**\n * @legacy @beta\n */\nexport interface IInternalMockRuntimeMessage {\n\tcontent: any;\n\tlocalOpMetadata?: unknown;\n\treferenceSequenceNumber?: number;\n}\n\n/**\n * Mock implementation of IContainerRuntime for testing basic submitting and processing of messages.\n * If test specific logic is required, extend this class and add the logic there. For an example, take a look\n * at MockContainerRuntimeForReconnection.\n * @legacy @beta\n */\nexport class MockContainerRuntime extends TypedEventEmitter<IContainerRuntimeEvents> {\n\tpublic clientId: string;\n\tpublic readonly deltaManager: MockDeltaManager;\n\t/**\n\t * @deprecated use the associated datastore to create the delta connection\n\t */\n\tprotected readonly deltaConnections: MockDeltaConnection[] = [];\n\tprotected readonly pendingMessages: IMockContainerRuntimePendingMessage[] = [];\n\tprotected readonly outbox: IInternalMockRuntimeMessage[] = [];\n\tprivate readonly idAllocationOutbox: IInternalMockRuntimeMessage[] = [];\n\t/**\n\t * The runtime options this instance is using. See {@link IMockContainerRuntimeOptions}.\n\t */\n\tprotected readonly runtimeOptions: Required<IMockContainerRuntimeOptions>;\n\n\tconstructor(\n\t\tprotected readonly dataStoreRuntime: MockFluidDataStoreRuntime,\n\t\tprotected readonly factory: MockContainerRuntimeFactory,\n\t\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions = defaultMockContainerRuntimeOptions,\n\t\tprotected readonly overrides?: { minimumSequenceNumber?: number | undefined },\n\t) {\n\t\tsuper();\n\t\tthis.deltaManager = new MockDeltaManager(() => this.clientId);\n\t\tthis.deltaManager.inbound.on(\"push\", (message: ISequencedDocumentMessage) => {\n\t\t\tthis.factory.pushMessage(message);\n\t\t});\n\n\t\tconst msn = overrides?.minimumSequenceNumber;\n\t\tif (msn !== undefined) {\n\t\t\tthis.deltaManager.lastSequenceNumber = msn;\n\t\t\tthis.deltaManager.minimumSequenceNumber = msn;\n\t\t}\n\t\t// Set FluidDataStoreRuntime's deltaManager to ours so that they are in sync.\n\t\tthis.dataStoreRuntime.deltaManagerInternal = this.deltaManager;\n\t\tthis.dataStoreRuntime.quorum = factory.quorum;\n\t\tthis.dataStoreRuntime.containerRuntime = this;\n\t\t// FluidDataStoreRuntime already creates a clientId, reuse that so they are in sync.\n\t\tthis.clientId = this.dataStoreRuntime.clientId ?? uuid();\n\t\tfactory.quorum.addMember(this.clientId, {});\n\t\tthis.runtimeOptions = makeContainerRuntimeOptions(mockContainerRuntimeOptions);\n\t\tassert(\n\t\t\tthis.runtimeOptions.flushMode !== FlushMode.Immediate ||\n\t\t\t\t!this.runtimeOptions.enableGroupedBatching,\n\t\t\t\"Grouped batching is not compatible with FlushMode.Immediate\",\n\t\t);\n\t}\n\n\t/**\n\t * @deprecated use the associated datastore to create the delta connection\n\t */\n\tpublic createDeltaConnection(): MockDeltaConnection {\n\t\tconst deltaConnection = this.dataStoreRuntime.createDeltaConnection();\n\t\tthis.deltaConnections.push(deltaConnection);\n\t\treturn deltaConnection;\n\t}\n\n\tpublic finalizeIdRange(range: IdCreationRange) {\n\t\tassert(\n\t\t\tthis.dataStoreRuntime.idCompressor !== undefined,\n\t\t\t\"Shouldn't try to finalize IdRanges without an IdCompressor\",\n\t\t);\n\t\tthis.dataStoreRuntime.idCompressor.finalizeCreationRange(range);\n\t}\n\n\t// This enables manual control over flush mode, allowing operations like rollback to be executed in a controlled environment.\n\t#manualFlushCalls: number = 0;\n\n\tpublic async runWithManualFlush(act: () => void | Promise<void>) {\n\t\tthis.#manualFlushCalls++;\n\t\ttry {\n\t\t\tawait act();\n\t\t} finally {\n\t\t\tthis.#manualFlushCalls--;\n\t\t}\n\t}\n\n\tpublic submit(messageContent: any, localOpMetadata?: unknown): number {\n\t\tconst clientSequenceNumber = ++this.deltaManager.clientSequenceNumber;\n\t\tconst message: IInternalMockRuntimeMessage = {\n\t\t\tcontent: messageContent,\n\t\t\tlocalOpMetadata,\n\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t};\n\n\t\tconst isAllocationMessage = this.isAllocationMessage(message.content);\n\n\t\tconst currentFlushMode =\n\t\t\tthis.#manualFlushCalls > 0 ? FlushMode.TurnBased : this.runtimeOptions.flushMode;\n\n\t\tswitch (currentFlushMode) {\n\t\t\tcase FlushMode.Immediate: {\n\t\t\t\tif (!isAllocationMessage) {\n\t\t\t\t\tconst idAllocationOp = this.generateIdAllocationOp();\n\t\t\t\t\tif (idAllocationOp !== undefined) {\n\t\t\t\t\t\tthis.submitInternal(idAllocationOp, clientSequenceNumber);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.submitInternal(message, clientSequenceNumber);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase FlushMode.TurnBased: {\n\t\t\t\t// Id allocation messages are directly submitted during the resubmit path\n\t\t\t\tif (isAllocationMessage) {\n\t\t\t\t\tthis.idAllocationOutbox.push(message);\n\t\t\t\t} else {\n\t\t\t\t\tthis.outbox.push(message);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported FlushMode ${this.runtimeOptions.flushMode}`);\n\t\t}\n\n\t\treturn clientSequenceNumber;\n\t}\n\n\t/**\n\t * If the message is an idAllocation message, it will finalize the id range and return true.\n\t * Otherwise, it will return false.\n\t */\n\tprotected maybeProcessIdAllocationMessage(message: ISequencedDocumentMessage): boolean {\n\t\tif (this.isAllocationMessage(message.contents)) {\n\t\t\tthis.finalizeIdRange(message.contents.contents);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate isAllocationMessage(\n\t\tmessage: any,\n\t): message is IMockContainerRuntimeIdAllocationMessage {\n\t\treturn (\n\t\t\tmessage !== undefined &&\n\t\t\t(message as IMockContainerRuntimeIdAllocationMessage).type === \"idAllocation\"\n\t\t);\n\t}\n\n\tpublic dirty(): void {}\n\tpublic get isDirty() {\n\t\treturn this.pendingMessages.length > 0;\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will send all messages queued since the last time\n\t * this method (or `flushSomeMessages`) was called. Otherwise, calling the method does nothing.\n\t */\n\tpublic flush() {\n\t\tthis.flushSomeMessages(this.outbox.length);\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will send the specified number of messages from the outbox\n\t * queued since the last time this (or `flush`) was called. Otherwise, calling the method does nothing.\n\t * This can be useful when simulating staging mode, and we only want to flush certain messages.\n\t */\n\tpublic flushSomeMessages(numMessages: number): void {\n\t\tif (!Number.isInteger(numMessages) || numMessages < 0) {\n\t\t\tthrow new Error(\"flushSomeMessages: numMessages must be a non-negative integer\");\n\t\t}\n\t\tif (this.runtimeOptions.flushMode !== FlushMode.TurnBased) {\n\t\t\treturn;\n\t\t}\n\n\t\t// This mimics the runtime behavior of the IdCompressor by generating an IdAllocationOp\n\t\t// and sticking it in front of any op that might rely on that id. It differs slightly in that\n\t\t// in the actual runtime it would get put in its own separate batch\n\t\tconst idAllocationOp = this.generateIdAllocationOp();\n\t\tif (idAllocationOp !== undefined) {\n\t\t\tthis.idAllocationOutbox.push(idAllocationOp);\n\t\t}\n\n\t\tconst actualMessagesToSubmit = this.outbox.splice(0, numMessages);\n\n\t\t// As with the runtime behavior, we need to send the idAllocationOps first\n\t\tconst messagesToSubmit = this.idAllocationOutbox.concat(actualMessagesToSubmit);\n\t\tthis.idAllocationOutbox.length = 0;\n\n\t\tlet fakeClientSequenceNumber = 1;\n\t\tmessagesToSubmit.forEach((message) => {\n\t\t\tthis.submitInternal(\n\t\t\t\tmessage,\n\t\t\t\t// When grouped batching is used, the ops within the same grouped batch will have\n\t\t\t\t// fake sequence numbers when they're ungrouped. The submit function will still\n\t\t\t\t// return the clientSequenceNumber but this will ensure that the readers will always\n\t\t\t\t// read the fake client sequence numbers.\n\t\t\t\tthis.runtimeOptions.enableGroupedBatching\n\t\t\t\t\t? fakeClientSequenceNumber++\n\t\t\t\t\t: this.deltaManager.clientSequenceNumber,\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will rebase the current batch by resubmitting them\n\t * to the data stores. Otherwise, calling the method does nothing.\n\t *\n\t * The method requires `runtimeOptions.enableGroupedBatching` to be enabled.\n\t */\n\tpublic rebase() {\n\t\tif (this.runtimeOptions.flushMode !== FlushMode.TurnBased) {\n\t\t\treturn;\n\t\t}\n\n\t\tassert(\n\t\t\tthis.runtimeOptions.enableGroupedBatching,\n\t\t\t\"Rebasing is not supported when group batching is disabled\",\n\t\t);\n\n\t\t// Only outbox needs to be rebased. The idAllocationOutbox is not rebased, as that\n\t\t// is a no-op (though resubmitting the other ops may generate new IDs)\n\t\tconst messagesToRebase = this.outbox.slice();\n\t\tthis.outbox.length = 0;\n\n\t\tthis.reSubmitMessages(messagesToRebase);\n\t}\n\n\tprotected reSubmitMessages(\n\t\tmessagesToResubmit: { content: any; localOpMetadata?: unknown }[],\n\t): void {\n\t\t// Sort the messages so that idAllocation messages are submitted first\n\t\t// When resubmitting non-idAllocation messages, they may generate new IDs.\n\t\t// This sort ensures that all ID ranges are finalized before they are\n\t\t// needed (i.e. before the messages that rely on them are processed)\n\t\t// and in the order they were allocated\n\t\tconst orderedMessages = messagesToResubmit\n\t\t\t.filter((message) => message.content.type === \"idAllocation\")\n\t\t\t.concat(messagesToResubmit.filter((message) => message.content.type !== \"idAllocation\"));\n\t\torderedMessages.forEach((pendingMessage) => {\n\t\t\tif (pendingMessage.content.type === \"idAllocation\") {\n\t\t\t\tthis.submit(pendingMessage.content, pendingMessage.localOpMetadata);\n\t\t\t} else {\n\t\t\t\tthis.dataStoreRuntime.reSubmit(pendingMessage.content, pendingMessage.localOpMetadata);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Rolls back all pending messages.\n\t * @remarks\n\t * This only works when the FlushMode is not immediate as immediate\n\t * flush mode send the ops to the mock runtime factory for processing/sequencing, and so those\n\t * ops are no longer local, so not available for rollback.\n\t */\n\tpublic rollback?(): void {\n\t\tconst messagesToRollback = this.outbox.slice().reverse();\n\t\tthis.outbox.length = 0;\n\t\tmessagesToRollback.forEach((pm) => {\n\t\t\tthis.dataStoreRuntime.rollback?.(pm.content, pm.localOpMetadata);\n\t\t});\n\t}\n\n\tprivate generateIdAllocationOp(): IInternalMockRuntimeMessage | undefined {\n\t\tconst idRange = this.dataStoreRuntime.idCompressor?.takeNextCreationRange();\n\t\tif (idRange?.ids !== undefined) {\n\t\t\tconst allocationOp: IMockContainerRuntimeIdAllocationMessage = {\n\t\t\t\ttype: \"idAllocation\",\n\t\t\t\tcontents: idRange,\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tcontent: allocationOp,\n\t\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate submitInternal(message: IInternalMockRuntimeMessage, clientSequenceNumber: number) {\n\t\t// Here, we should instead push to the DeltaManager. And the DeltaManager will push things into the factory's messages\n\t\tthis.deltaManager.outbound.push([\n\t\t\t{\n\t\t\t\tclientSequenceNumber,\n\t\t\t\tcontents: message.content,\n\t\t\t\treferenceSequenceNumber:\n\t\t\t\t\tmessage.referenceSequenceNumber ?? this.deltaManager.lastSequenceNumber,\n\t\t\t\ttype: MessageType.Operation,\n\t\t\t},\n\t\t]);\n\t\tthis.addPendingMessage(message.content, message.localOpMetadata, clientSequenceNumber);\n\t}\n\n\tpublic process(message: ISequencedDocumentMessage) {\n\t\tthis.deltaManager.process(message);\n\t\tconst [local, localOpMetadata] = this.processInternal(message);\n\n\t\tif (this.isAllocationMessage(message.contents)) {\n\t\t\tthis.finalizeIdRange(message.contents.contents);\n\t\t} else {\n\t\t\tconst messagesContent: IRuntimeMessagesContent[] = [\n\t\t\t\t{\n\t\t\t\t\tcontents: message.contents,\n\t\t\t\t\tclientSequenceNumber: message.clientSequenceNumber,\n\t\t\t\t\tlocalOpMetadata,\n\t\t\t\t},\n\t\t\t];\n\t\t\tthis.dataStoreRuntime.processMessages({ envelope: message, local, messagesContent });\n\t\t}\n\t}\n\n\tprotected addPendingMessage(\n\t\tcontent: any,\n\t\tlocalOpMetadata: unknown,\n\t\tclientSequenceNumber: number,\n\t) {\n\t\tconst pendingMessage: IMockContainerRuntimePendingMessage = {\n\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t\tcontent,\n\t\t\tclientSequenceNumber,\n\t\t\tlocalOpMetadata,\n\t\t};\n\t\tthis.pendingMessages.push(pendingMessage);\n\t}\n\n\tprotected processInternal(message: ISequencedDocumentMessage): [boolean, unknown] {\n\t\tlet localOpMetadata: unknown;\n\t\tconst local = this.clientId === message.clientId;\n\t\tif (local) {\n\t\t\tconst pendingMessage = this.pendingMessages.shift();\n\t\t\tassert(\n\t\t\t\tpendingMessage?.clientSequenceNumber === message.clientSequenceNumber,\n\t\t\t\t\"Unexpected message\",\n\t\t\t);\n\t\t\tlocalOpMetadata = pendingMessage.localOpMetadata;\n\t\t}\n\t\treturn [local, localOpMetadata];\n\t}\n\n\tpublic async resolveHandle(handle: IFluidHandle) {\n\t\treturn this.dataStoreRuntime.resolveHandle({\n\t\t\turl: toFluidHandleInternal(handle).absolutePath,\n\t\t});\n\t}\n}\n\n/**\n * Factory to create MockContainerRuntime for testing basic submitting and processing of messages.\n * This also acts as a very basic server that stores the messages from all the MockContainerRuntimes and\n * processes them when asked.\n * If test specific logic is required, extend this class and add the logic there. For an example, take a look\n * at MockContainerRuntimeFactoryForReconnection.\n * @legacy @beta\n */\nexport class MockContainerRuntimeFactory {\n\tpublic sequenceNumber = 0;\n\tpublic minSeq = new Map<string, number>();\n\tpublic readonly quorum = new MockQuorumClients();\n\t/**\n\t * The MockContainerRuntimes we produce will push messages into this queue as they are submitted.\n\t * This is playing the role of the orderer, establishing a single universal order for the messages generated.\n\t * They are held in this queue until we explicitly choose to process them, at which time they are \"broadcast\" to\n\t * each of the runtimes.\n\t */\n\tprotected messages: ISequencedDocumentMessage[] = [];\n\tprotected readonly runtimes: Set<MockContainerRuntime> = new Set();\n\n\t/**\n\t * The container runtime options which will be provided to the all runtimes\n\t * created by this factory and also drive the way the ops are processed.\n\t *\n\t * See {@link IMockContainerRuntimeOptions}\n\t */\n\tprotected readonly runtimeOptions: Required<IMockContainerRuntimeOptions>;\n\n\tconstructor(\n\t\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions = defaultMockContainerRuntimeOptions,\n\t) {\n\t\tthis.runtimeOptions = makeContainerRuntimeOptions(mockContainerRuntimeOptions);\n\t}\n\n\tpublic get outstandingMessageCount() {\n\t\treturn this.messages.length;\n\t}\n\n\t/**\n\t * @returns a minimum sequence number for all connected clients.\n\t */\n\tpublic getMinSeq(): number {\n\t\tlet minimumSequenceNumber: number | undefined;\n\t\tfor (const [client, clientSequenceNumber] of this.minSeq) {\n\t\t\t// We have to make sure, a client is part of the quorum, when\n\t\t\t// we compute the msn. We assume that the quorum accurately\n\t\t\t// represents the currently connected clients. In some tests\n\t\t\t// for reconnects, we will remove clients from the quorum\n\t\t\t// to indicate they are currently not connected. In that case,\n\t\t\t// they must no longer contribute to the msn computation.\n\t\t\tif (this.quorum.getMember(client) !== undefined) {\n\t\t\t\tminimumSequenceNumber =\n\t\t\t\t\tminimumSequenceNumber === undefined\n\t\t\t\t\t\t? clientSequenceNumber\n\t\t\t\t\t\t: Math.min(minimumSequenceNumber, clientSequenceNumber);\n\t\t\t}\n\t\t}\n\t\treturn minimumSequenceNumber ?? 0;\n\t}\n\n\tpublic createContainerRuntime(\n\t\tdataStoreRuntime: MockFluidDataStoreRuntime,\n\t): MockContainerRuntime {\n\t\tconst containerRuntime = new MockContainerRuntime(\n\t\t\tdataStoreRuntime,\n\t\t\tthis,\n\t\t\tthis.runtimeOptions,\n\t\t);\n\t\tthis.runtimes.add(containerRuntime);\n\t\treturn containerRuntime;\n\t}\n\n\tpublic removeContainerRuntime(containerRuntime: MockContainerRuntime) {\n\t\tthis.runtimes.delete(containerRuntime);\n\t}\n\n\tpublic pushMessage(msg: Partial<ISequencedDocumentMessage>) {\n\t\tdeepFreeze(msg);\n\t\tif (\n\t\t\tmsg.clientId &&\n\t\t\tmsg.referenceSequenceNumber !== undefined &&\n\t\t\t!this.minSeq.has(msg.clientId)\n\t\t) {\n\t\t\tthis.minSeq.set(msg.clientId, msg.referenceSequenceNumber);\n\t\t}\n\t\tthis.messages.push(msg as ISequencedDocumentMessage);\n\t}\n\n\tprotected lastProcessedMessage: ISequencedDocumentMessage | undefined;\n\tprotected getFirstMessageToProcess() {\n\t\tassert(this.messages.length > 0, \"The message queue should not be empty\");\n\n\t\t// Explicitly JSON clone the value to match the behavior of going thru the wire.\n\t\tconst message = JSON.parse(\n\t\t\tJSON.stringify(this.messages.shift()),\n\t\t) as ISequencedDocumentMessage;\n\n\t\t// TODO: Determine if this needs to be adapted for handling server-generated messages (which have null clientId and referenceSequenceNumber of -1).\n\t\tthis.minSeq.set(message.clientId as string, message.referenceSequenceNumber);\n\t\tif (\n\t\t\tthis.runtimeOptions.flushMode === FlushMode.Immediate ||\n\t\t\tthis.lastProcessedMessage?.clientId !== message.clientId\n\t\t) {\n\t\t\tthis.sequenceNumber++;\n\t\t}\n\t\tmessage.sequenceNumber = this.sequenceNumber;\n\t\tmessage.minimumSequenceNumber = this.getMinSeq();\n\t\tthis.lastProcessedMessage = message;\n\t\treturn message;\n\t}\n\n\tprivate processFirstMessage() {\n\t\tconst message = this.getFirstMessageToProcess();\n\t\tfor (const runtime of this.runtimes) {\n\t\t\truntime.process(message);\n\t\t}\n\t}\n\n\t/**\n\t * Process one of the queued messages. Throws if no messages are queued.\n\t */\n\tpublic processOneMessage() {\n\t\tif (this.messages.length === 0) {\n\t\t\tthrow new Error(\"Tried to process a message that did not exist\");\n\t\t}\n\t\tthis.lastProcessedMessage = undefined;\n\n\t\tthis.processFirstMessage();\n\t}\n\n\t/**\n\t * Process a given number of queued messages. Throws if there are fewer messages queued than requested.\n\t * @param count - the number of messages to process\n\t */\n\tpublic processSomeMessages(count: number) {\n\t\tif (count > this.messages.length) {\n\t\t\tthrow new Error(\"Tried to process more messages than exist\");\n\t\t}\n\n\t\tthis.lastProcessedMessage = undefined;\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tthis.processFirstMessage();\n\t\t}\n\t}\n\n\t/**\n\t * Process all remaining messages in the queue.\n\t */\n\tpublic processAllMessages() {\n\t\tthis.lastProcessedMessage = undefined;\n\t\twhile (this.messages.length > 0) {\n\t\t\tthis.processFirstMessage();\n\t\t}\n\t}\n}\n\n/**\n * @legacy @beta\n */\nexport class MockQuorumClients implements IQuorumClients, EventEmitter {\n\tprivate readonly members: Map<string, ISequencedClient>;\n\tprivate readonly eventEmitter = new EventEmitter();\n\n\tconstructor(...members: [string, Partial<ISequencedClient>][]) {\n\t\tthis.members = new Map((members as [string, ISequencedClient][]) ?? []);\n\t}\n\n\taddMember(id: string, client: Partial<ISequencedClient>) {\n\t\tthis.members.set(id, client as ISequencedClient);\n\t\tthis.eventEmitter.emit(\"addMember\", id, client);\n\t}\n\n\tremoveMember(id: string) {\n\t\tif (this.members.delete(id)) {\n\t\t\tthis.eventEmitter.emit(\"removeMember\", id);\n\t\t}\n\t}\n\n\tgetMembers(): Map<string, ISequencedClient> {\n\t\t// Implementation always generates a new Map.\n\t\t// Mock should as well in case any callers rely on being able to modify\n\t\t// the returned Map.\n\t\treturn new Map(this.members);\n\t}\n\tgetMember(clientId: string): ISequencedClient | undefined {\n\t\treturn this.getMembers().get(clientId);\n\t}\n\tdisposed: boolean = false;\n\n\tdispose(): void {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\n\taddListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\ton(event: string | number, listener: (...args: any[]) => void): this {\n\t\tswitch (event) {\n\t\t\tcase \"afterOn\":\n\t\t\t\tthis.eventEmitter.on(event, listener);\n\t\t\t\treturn this;\n\n\t\t\tcase \"addMember\":\n\t\t\tcase \"removeMember\":\n\t\t\t\tthis.eventEmitter.on(event, listener);\n\t\t\t\tthis.eventEmitter.emit(\"afterOn\", event);\n\t\t\t\treturn this;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Method not implemented.\");\n\t\t}\n\t}\n\tonce(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tprependListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tprependOnceListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tremoveListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthis.eventEmitter.removeListener(event, listener);\n\t\treturn this;\n\t}\n\toff(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthis.eventEmitter.off(event, listener);\n\t\treturn this;\n\t}\n\tremoveAllListeners(event?: string | number | undefined): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tsetMaxListeners(n: number): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tgetMaxListeners(): number {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tlisteners(event: string | number): ReturnType<EventEmitter[\"listeners\"]> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\trawListeners(event: string | number): ReturnType<EventEmitter[\"rawListeners\"]> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\temit(event: string | number, ...args: any[]): boolean {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\teventNames(): (string | number)[] {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tlistenerCount(type: string | number): number {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n}\n\n/**\n * @legacy @beta\n */\nexport class MockAudience\n\textends TypedEventEmitter<IAudienceEvents>\n\timplements IAudienceOwner\n{\n\tprivate readonly audienceMembers: Map<string, IClient>;\n\tprivate _currentClientId: string | undefined;\n\n\tpublic constructor() {\n\t\tsuper();\n\t\tthis.audienceMembers = new Map<string, IClient>();\n\t}\n\n\tpublic addMember(clientId: string, member: IClient): void {\n\t\tthis.audienceMembers.set(clientId, member);\n\t\tthis.emit(\"addMember\", clientId, member);\n\t}\n\n\tpublic removeMember(clientId: string): boolean {\n\t\tconst member = this.audienceMembers.get(clientId);\n\t\tconst deleteResult = this.audienceMembers.delete(clientId);\n\t\tthis.emit(\"removeMember\", clientId, member);\n\t\treturn deleteResult;\n\t}\n\n\tpublic getMembers(): Map<string, IClient> {\n\t\treturn new Map<string, IClient>(this.audienceMembers.entries());\n\t}\n\tpublic getMember(clientId: string): IClient | undefined {\n\t\treturn this.audienceMembers.get(clientId);\n\t}\n\n\tpublic getSelf(): ISelf | undefined {\n\t\treturn this._currentClientId === undefined\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tclientId: this._currentClientId,\n\t\t\t\t};\n\t}\n\n\tpublic setCurrentClientId(clientId: string): void {\n\t\tif (this._currentClientId !== clientId) {\n\t\t\tconst oldId = this._currentClientId;\n\t\t\tthis._currentClientId = clientId;\n\t\t\tthis.emit(\n\t\t\t\t\"selfChanged\",\n\t\t\t\toldId === undefined ? undefined : ({ clientId: oldId } satisfies ISelf),\n\t\t\t\t{ clientId } satisfies ISelf,\n\t\t\t);\n\t\t}\n\t}\n}\n\nconst attachStatesToComparableNumbers = {\n\t[AttachState.Detached]: 0,\n\t[AttachState.Attaching]: 1,\n\t[AttachState.Attached]: 2,\n} as const;\n\n/**\n * Mock implementation of IRuntime for testing that does nothing\n * @legacy @beta\n */\nexport class MockFluidDataStoreRuntime\n\textends EventEmitter\n\timplements IFluidDataStoreRuntime, IFluidDataStoreChannel, IFluidHandleContext\n{\n\tconstructor(overrides?: {\n\t\tclientId?: string;\n\t\tentryPoint?: IFluidHandle<FluidObject>;\n\t\tid?: string;\n\t\tlogger?: ITelemetryBaseLogger;\n\t\tidCompressor?: IIdCompressor & IIdCompressorCore;\n\t\tattachState?: AttachState;\n\t\tregistry?: readonly IChannelFactory[];\n\t\tminVersionForCollab?: MinimumVersionForCollab;\n\t}) {\n\t\tsuper();\n\t\tthis.clientId = overrides?.clientId ?? uuid();\n\t\tthis.entryPoint = toFluidHandleInternal(\n\t\t\toverrides?.entryPoint ?? new MockHandle(null as unknown as FluidObject, \"\", \"\"),\n\t\t);\n\t\tthis.id = overrides?.id ?? uuid();\n\t\tconst childLoggerProps: Parameters<typeof createChildLogger>[0] = {\n\t\t\tnamespace: \"fluid:MockFluidDataStoreRuntime\",\n\t\t};\n\t\tconst logger = overrides?.logger;\n\t\tif (logger !== undefined) {\n\t\t\tchildLoggerProps.logger = logger;\n\t\t}\n\t\tthis.logger = createChildLogger(childLoggerProps);\n\t\tthis.idCompressor = overrides?.idCompressor;\n\t\tthis._attachState = overrides?.attachState ?? AttachState.Attached;\n\n\t\tconst registry = overrides?.registry;\n\t\tif (registry) {\n\t\t\tthis.registry = new Map(registry.map((factory) => [factory.type, factory]));\n\t\t}\n\n\t\tthis.minVersionForCollab = overrides?.minVersionForCollab;\n\t}\n\n\tprivate readonly: boolean = false;\n\tpublic readonly isReadOnly = () => this.readonly;\n\n\tpublic readonly entryPoint: IFluidHandleInternal<FluidObject>;\n\n\t/**\n\t * @see IFluidDataStoreRuntimeInternalConfig.minVersionForCollab\n\t */\n\tpublic readonly minVersionForCollab: MinimumVersionForCollab | undefined;\n\n\tpublic get IFluidHandleContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get rootRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get channelsRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get objectsRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\n\tpublic readonly documentId: string = undefined as any;\n\tpublic readonly id: string;\n\tpublic readonly existing: boolean = undefined as any;\n\tpublic options: Record<string | number, any> = {};\n\tpublic clientId: string;\n\tpublic readonly path = \"\";\n\tpublic readonly connected = true;\n\tpublic deltaManagerInternal = new MockDeltaManager();\n\tpublic get deltaManager(): IDeltaManagerErased {\n\t\treturn toDeltaManagerErased(this.deltaManagerInternal);\n\t}\n\tpublic readonly loader: ILoader = undefined as any;\n\tpublic readonly logger: ITelemetryBaseLogger;\n\tpublic quorum = new MockQuorumClients();\n\tprivate readonly audience = new MockAudience();\n\tpublic containerRuntime?: MockContainerRuntime;\n\tpublic idCompressor: (IIdCompressor & IIdCompressorCore) | undefined;\n\tprivate readonly deltaConnections: MockDeltaConnection[] = [];\n\tprivate readonly registry?: ReadonlyMap<string, IChannelFactory>;\n\n\tpublic createDeltaConnection(): MockDeltaConnection {\n\t\tconst deltaConnection = new MockDeltaConnection(\n\t\t\t(messageContent: any, localOpMetadata: unknown) =>\n\t\t\t\tthis.submitMessageInternal(messageContent, localOpMetadata),\n\t\t\t() => this.setChannelDirty(),\n\t\t);\n\t\tthis.deltaConnections.push(deltaConnection);\n\t\treturn deltaConnection;\n\t}\n\n\tpublic get absolutePath() {\n\t\treturn `/${this.id}`;\n\t}\n\n\t/**\n\t * @deprecated Use `attachState` instead\n\t *\n\t * @privateRemarks Also remove the setter when this is removed. setters don't get their own doc tags.\n\t */\n\tpublic get local(): boolean {\n\t\treturn !this.isAttached;\n\t}\n\tpublic set local(local: boolean) {\n\t\t// this does not validate attach state orders, or fire events to maintain\n\t\t// the existing behavior. due to this, this method is deprecated and will\n\t\t// be removed\n\t\tthis._attachState = local ? AttachState.Detached : AttachState.Attached;\n\t}\n\n\tprivate _disposed = false;\n\n\tpublic get disposed() {\n\t\treturn this._disposed;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._disposed = true;\n\t}\n\n\tpublic async getChannel(id: string): Promise<IChannel> {\n\t\treturn null as any as IChannel;\n\t}\n\tpublic createChannel(id: string | undefined, type: string): IChannel {\n\t\tif (this.registry === undefined) {\n\t\t\t// This preserves the behavior of this mock from before registry support was added.\n\t\t\treturn null as any as IChannel;\n\t\t}\n\n\t\tconst factory = this.registry.get(type);\n\t\tassert(factory !== undefined, \"type missing from registry\");\n\t\treturn factory.create(this, id ?? uuid());\n\t}\n\n\t/**\n\t * @remarks This is for internal use only.\n\t */\n\tpublic ILayerCompatDetails?: unknown;\n\n\tpublic addChannel(channel: IChannel): void {}\n\n\tpublic get isAttached(): boolean {\n\t\treturn this.attachState !== AttachState.Detached;\n\t}\n\n\tprivate _attachState: AttachState;\n\tpublic get attachState(): AttachState {\n\t\treturn this._attachState;\n\t}\n\n\tpublic get visibilityState(): VisibilityState {\n\t\treturn this.isAttached ? VisibilityState.GloballyVisible : VisibilityState.NotVisible;\n\t}\n\n\tpublic bindChannel(channel: IChannel): void {\n\t\treturn;\n\t}\n\n\tpublic attachGraph(): void {\n\t\treturn;\n\t}\n\n\tpublic makeVisibleAndAttachGraph(): void {\n\t\treturn;\n\t}\n\n\tpublic bind(handle: IFluidHandle): void {\n\t\treturn;\n\t}\n\n\tpublic getQuorum(): IQuorumClients {\n\t\treturn this.quorum;\n\t}\n\n\tpublic getAudience(): IAudience {\n\t\treturn this.audience;\n\t}\n\n\tpublic save(message: string) {\n\t\treturn;\n\t}\n\n\tpublic async close(): Promise<void> {\n\t\treturn;\n\t}\n\n\tpublic async uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>> {\n\t\treturn null as any as IFluidHandle<ArrayBufferLike>;\n\t}\n\n\tpublic async getBlob(blobId: string): Promise<any> {\n\t\treturn null;\n\t}\n\n\tprivate submitMessageInternal(messageContent: any, localOpMetadata: unknown): number {\n\t\tassert(\n\t\t\tthis.containerRuntime !== undefined,\n\t\t\t\"The container runtime has not been initialized\",\n\t\t);\n\t\treturn this.containerRuntime.submit(messageContent, localOpMetadata);\n\t}\n\n\tprivate setChannelDirty(): void {\n\t\tassert(\n\t\t\tthis.containerRuntime !== undefined,\n\t\t\t\"The container runtime has not been initialized\",\n\t\t);\n\t\treturn this.containerRuntime.dirty();\n\t}\n\n\tpublic submitSignal(type: string, content: any) {\n\t\treturn null;\n\t}\n\n\tpublic processMessages(messageCollection: IRuntimeMessageCollection) {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.processMessages(messageCollection);\n\t\t});\n\t}\n\n\tpublic processSignal(message: any, local: boolean) {\n\t\treturn;\n\t}\n\n\tpublic updateMinSequenceNumber(value: number): void {\n\t\treturn;\n\t}\n\n\tpublic setConnectionState(connected: boolean, clientId?: string) {\n\t\tif (connected && clientId !== undefined) {\n\t\t\tthis.clientId = clientId;\n\t\t}\n\t\tthis.deltaConnections.forEach((dc) => dc.setConnectionState(connected));\n\t\treturn;\n\t}\n\n\tpublic notifyReadOnlyState(readonly: boolean): void {\n\t\tthis.readonly = readonly;\n\t}\n\n\tpublic async resolveHandle(request: IRequest): Promise<IResponse> {\n\t\tif (request.url !== undefined) {\n\t\t\treturn {\n\t\t\t\tstatus: 200,\n\t\t\t\tmimeType: \"fluid/object\",\n\t\t\t\tvalue: request.url,\n\t\t\t};\n\t\t}\n\t\treturn this.request(request);\n\t}\n\n\tpublic async request(request: IRequest): Promise<IResponse> {\n\t\treturn null as any as IResponse;\n\t}\n\n\tpublic async summarize(\n\t\tfullTree?: boolean,\n\t\ttrackState?: boolean,\n\t): Promise<ISummaryTreeWithStats> {\n\t\tconst stats = mergeStats();\n\t\tstats.treeNodeCount++;\n\t\treturn {\n\t\t\tsummary: {\n\t\t\t\ttype: SummaryType.Tree,\n\t\t\t\ttree: {},\n\t\t\t},\n\t\t\tstats,\n\t\t};\n\t}\n\n\tpublic async getGCData(): Promise<IGarbageCollectionData> {\n\t\treturn {\n\t\t\tgcNodes: {},\n\t\t};\n\t}\n\n\tpublic updateUsedRoutes(usedRoutes: string[]) {}\n\n\tpublic getAttachSnapshot(): ITreeEntry[] {\n\t\treturn [];\n\t}\n\n\tpublic getAttachSummary(): ISummaryTreeWithStats {\n\t\tconst stats = mergeStats();\n\t\tstats.treeNodeCount++;\n\t\treturn {\n\t\t\tsummary: {\n\t\t\t\ttype: SummaryType.Tree,\n\t\t\t\ttree: {},\n\t\t\t},\n\t\t\tstats,\n\t\t};\n\t}\n\n\tpublic getAttachGCData(\n\t\ttelemetryContext?: ITelemetryContext | undefined,\n\t): IGarbageCollectionData {\n\t\treturn {\n\t\t\tgcNodes: {},\n\t\t};\n\t}\n\n\tpublic setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void {\n\t\tif (attachState === this._attachState) {\n\t\t\treturn;\n\t\t}\n\t\tconst proposedState = attachStatesToComparableNumbers[attachState];\n\t\tconst startingState = attachStatesToComparableNumbers[this._attachState];\n\t\tif (proposedState < startingState) {\n\t\t\tthrow new Error(`cannot transition back to ${attachState} from ${this.attachState}`);\n\t\t}\n\n\t\tif (\n\t\t\tstartingState < attachStatesToComparableNumbers[AttachState.Attaching] &&\n\t\t\tproposedState >= attachStatesToComparableNumbers[AttachState.Attaching]\n\t\t) {\n\t\t\tthis._attachState = AttachState.Attaching;\n\t\t\tthis.emit(\"attaching\");\n\t\t}\n\n\t\tif (\n\t\t\tstartingState < attachStatesToComparableNumbers[AttachState.Attached] &&\n\t\t\tproposedState >= attachStatesToComparableNumbers[AttachState.Attached]\n\t\t) {\n\t\t\tthis._attachState = AttachState.Attached;\n\t\t\tthis.emit(\"attached\");\n\t\t}\n\t}\n\n\tpublic async waitAttached(): Promise<void> {\n\t\treturn;\n\t}\n\n\tpublic async requestDataStore(request: IRequest): Promise<IResponse> {\n\t\treturn null as any as IResponse;\n\t}\n\n\tpublic reSubmit(content: any, localOpMetadata: unknown, squash?: boolean) {\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.reSubmit(content, localOpMetadata, squash);\n\t\t});\n\t}\n\n\tpublic async applyStashedOp(content: any) {\n\t\treturn this.deltaConnections.map((dc) => dc.applyStashedOp(content))[0];\n\t}\n\n\tpublic rollback?(message: any, localOpMetadata: unknown): void {\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.rollback?.(message, localOpMetadata);\n\t\t});\n\t}\n}\n\n/**\n * Mock implementation of IDeltaConnection\n * @internal\n */\nexport class MockEmptyDeltaConnection implements IDeltaConnection {\n\tpublic connected = false;\n\n\tpublic attach(handler) {}\n\n\tpublic submit(messageContent: any): number {\n\t\tassert(false, \"Throw submit error on mock empty delta connection\");\n\t}\n\n\tpublic dirty(): void {}\n}\n\n/**\n * Mock implementation of IChannelStorageService\n * @legacy @beta\n */\nexport class MockObjectStorageService implements IChannelStorageService {\n\tprivate readonly snapshotTree: ISnapshotTree;\n\n\t/**\n\t * @param contents - Key value pairs that represent a snapshot.\n\t * The keys are the path to the contents of a blob in the snapshot tree. The corresponding values are its contents.\n\t *\n\t * @remarks\n\t * The snapshot contents must not change after it has been passed here as the changes will not be reflected\n\t * in the snapshot tree retrieved via `getSnapshotTree`.\n\t */\n\tpublic constructor(private readonly contents: { [key: string]: string }) {\n\t\tthis.snapshotTree = createSnapshotTreeFromContents(contents);\n\t}\n\n\tpublic async readBlob(path: string): Promise<ArrayBufferLike> {\n\t\treturn stringToBuffer(this.contents[path], \"utf8\");\n\t}\n\tpublic async contains(path: string): Promise<boolean> {\n\t\treturn this.contents[path] !== undefined;\n\t}\n\tpublic async list(path: string): Promise<string[]> {\n\t\tconst pathPartsLength = getNormalizedObjectStoragePathParts(path).length;\n\t\treturn Object.keys(this.contents).filter(\n\t\t\t(key) => key.startsWith(path) && key.split(\"/\").length === pathPartsLength + 1,\n\t\t);\n\t}\n\n\tpublic getSnapshotTree(): ISnapshotTree {\n\t\treturn this.snapshotTree;\n\t}\n}\n\n/**\n * Mock implementation of IChannelServices\n * @legacy @beta\n */\nexport class MockSharedObjectServices implements IChannelServices {\n\tpublic static createFromSummary(summaryTree: ISummaryTree) {\n\t\tconst contents: { [key: string]: string } = {};\n\t\tsetContentsFromSummaryTree(summaryTree, \"\", contents);\n\t\treturn new MockSharedObjectServices(contents);\n\t}\n\n\tpublic deltaConnection: IDeltaConnection = new MockEmptyDeltaConnection();\n\tpublic objectStorage: MockObjectStorageService;\n\n\tpublic constructor(contents: { [key: string]: string }) {\n\t\tthis.objectStorage = new MockObjectStorageService(contents);\n\t}\n}\n\n/**\n * Populate the given `contents` object with all paths/values in a summary tree\n */\nfunction setContentsFromSummaryTree(\n\t{ tree }: ISummaryTree,\n\tpath: string,\n\tcontents: { [key: string]: string },\n): void {\n\tfor (const [key, value] of Object.entries(tree)) {\n\t\tswitch (value.type) {\n\t\t\tcase SummaryType.Blob:\n\t\t\t\tassert(\n\t\t\t\t\ttypeof value.content === \"string\",\n\t\t\t\t\t\"Unexpected blob value on mock createFromSummary\",\n\t\t\t\t);\n\t\t\t\tcontents[`${path}${key}`] = value.content;\n\t\t\t\tbreak;\n\t\t\tcase SummaryType.Tree:\n\t\t\t\tsetContentsFromSummaryTree(value, `${path}${key}/`, contents);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tassert(false, \"Unexpected summary type on mock createFromSummary\");\n\t\t}\n\t}\n}\n\n/**\n * Create an ISnapshotTree from contents object (reverse of setContentsFromSummaryTree)\n * @param contents - Object with path/value pairs\n * @returns ISnapshotTree representing the hierarchical structure\n */\nexport function createSnapshotTreeFromContents(contents: {\n\t[key: string]: string;\n}): ISnapshotTree {\n\tconst tree: ISnapshotTree = {\n\t\ttrees: {},\n\t\tblobs: {},\n\t};\n\n\tfor (const [path, content] of Object.entries(contents)) {\n\t\t// Remove empty strings to handle leading, trailing, or consecutive slashes in the path.\n\t\tconst pathParts = path.split(\"/\").filter((part) => part !== \"\");\n\t\tlet currentTree = tree;\n\n\t\t// Navigate/create the tree structure for all but the last part\n\t\tfor (let i = 0; i < pathParts.length - 1; i++) {\n\t\t\tconst part = pathParts[i];\n\t\t\tif (!currentTree.trees[part]) {\n\t\t\t\tcurrentTree.trees[part] = {\n\t\t\t\t\ttrees: {},\n\t\t\t\t\tblobs: {},\n\t\t\t\t};\n\t\t\t}\n\t\t\tcurrentTree = currentTree.trees[part];\n\t\t}\n\n\t\t// Add the blob at the final location\n\t\tconst blobName = pathParts[pathParts.length - 1];\n\t\tif (blobName !== undefined) {\n\t\t\tcurrentTree.blobs[blobName] = content;\n\t\t}\n\t}\n\n\treturn tree;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/test-runtime-utils",
3
- "version": "2.70.0-361248",
3
+ "version": "2.70.0",
4
4
  "description": "Fluid runtime test utilities",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -69,26 +69,26 @@
69
69
  "temp-directory": "nyc/.nyc_output"
70
70
  },
71
71
  "dependencies": {
72
- "@fluid-internal/client-utils": "2.70.0-361248",
73
- "@fluidframework/container-definitions": "2.70.0-361248",
74
- "@fluidframework/container-runtime-definitions": "2.70.0-361248",
75
- "@fluidframework/core-interfaces": "2.70.0-361248",
76
- "@fluidframework/core-utils": "2.70.0-361248",
77
- "@fluidframework/datastore-definitions": "2.70.0-361248",
78
- "@fluidframework/driver-definitions": "2.70.0-361248",
79
- "@fluidframework/driver-utils": "2.70.0-361248",
80
- "@fluidframework/id-compressor": "2.70.0-361248",
81
- "@fluidframework/routerlicious-driver": "2.70.0-361248",
82
- "@fluidframework/runtime-definitions": "2.70.0-361248",
83
- "@fluidframework/runtime-utils": "2.70.0-361248",
84
- "@fluidframework/telemetry-utils": "2.70.0-361248",
72
+ "@fluid-internal/client-utils": "~2.70.0",
73
+ "@fluidframework/container-definitions": "~2.70.0",
74
+ "@fluidframework/container-runtime-definitions": "~2.70.0",
75
+ "@fluidframework/core-interfaces": "~2.70.0",
76
+ "@fluidframework/core-utils": "~2.70.0",
77
+ "@fluidframework/datastore-definitions": "~2.70.0",
78
+ "@fluidframework/driver-definitions": "~2.70.0",
79
+ "@fluidframework/driver-utils": "~2.70.0",
80
+ "@fluidframework/id-compressor": "~2.70.0",
81
+ "@fluidframework/routerlicious-driver": "~2.70.0",
82
+ "@fluidframework/runtime-definitions": "~2.70.0",
83
+ "@fluidframework/runtime-utils": "~2.70.0",
84
+ "@fluidframework/telemetry-utils": "~2.70.0",
85
85
  "jsrsasign": "^11.0.0",
86
86
  "uuid": "^11.1.0"
87
87
  },
88
88
  "devDependencies": {
89
89
  "@arethetypeswrong/cli": "^0.17.1",
90
90
  "@biomejs/biome": "~1.9.3",
91
- "@fluid-internal/mocha-test-setup": "2.70.0-361248",
91
+ "@fluid-internal/mocha-test-setup": "~2.70.0",
92
92
  "@fluid-tools/build-cli": "^0.58.3",
93
93
  "@fluidframework/build-common": "^2.0.3",
94
94
  "@fluidframework/build-tools": "^0.58.3",
@@ -109,7 +109,26 @@
109
109
  "typescript": "~5.4.5"
110
110
  },
111
111
  "typeValidation": {
112
- "broken": {},
112
+ "broken": {
113
+ "Class_MockFluidDataStoreContext": {
114
+ "backCompat": false
115
+ },
116
+ "Class_MockFluidDataStoreRuntime": {
117
+ "backCompat": false
118
+ },
119
+ "ClassStatics_MockFluidDataStoreContext": {
120
+ "backCompat": false
121
+ },
122
+ "ClassStatics_MockFluidDataStoreRuntime": {
123
+ "backCompat": false
124
+ },
125
+ "Class_MockObjectStorageService": {
126
+ "forwardCompat": false
127
+ },
128
+ "Class_MockSharedObjectServices": {
129
+ "forwardCompat": false
130
+ }
131
+ },
113
132
  "entrypoint": "legacy"
114
133
  },
115
134
  "scripts": {