@fluidframework/test-utils 2.0.0-dev-rc.3.0.0.250606 → 2.0.0-dev-rc.3.0.0.254274

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.
Files changed (139) hide show
  1. package/api-report/test-utils.api.md +68 -48
  2. package/dist/DriverWrappers.d.ts +1 -1
  3. package/dist/DriverWrappers.d.ts.map +1 -1
  4. package/dist/DriverWrappers.js.map +1 -1
  5. package/dist/TestSummaryUtils.d.ts +4 -4
  6. package/dist/TestSummaryUtils.d.ts.map +1 -1
  7. package/dist/TestSummaryUtils.js +12 -12
  8. package/dist/TestSummaryUtils.js.map +1 -1
  9. package/dist/containerUtils.d.ts +2 -2
  10. package/dist/containerUtils.d.ts.map +1 -1
  11. package/dist/containerUtils.js +3 -3
  12. package/dist/containerUtils.js.map +1 -1
  13. package/dist/debug.d.ts.map +1 -1
  14. package/dist/debug.js.map +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/interfaces.d.ts +1 -1
  19. package/dist/interfaces.d.ts.map +1 -1
  20. package/dist/interfaces.js.map +1 -1
  21. package/dist/loaderContainerTracker.d.ts +1 -1
  22. package/dist/loaderContainerTracker.d.ts.map +1 -1
  23. package/dist/loaderContainerTracker.js +13 -13
  24. package/dist/loaderContainerTracker.js.map +1 -1
  25. package/dist/localCodeLoader.d.ts +3 -3
  26. package/dist/localCodeLoader.d.ts.map +1 -1
  27. package/dist/localCodeLoader.js +4 -4
  28. package/dist/localCodeLoader.js.map +1 -1
  29. package/dist/localLoader.d.ts +2 -2
  30. package/dist/localLoader.d.ts.map +1 -1
  31. package/dist/localLoader.js +2 -2
  32. package/dist/localLoader.js.map +1 -1
  33. package/dist/packageVersion.d.ts +1 -1
  34. package/dist/packageVersion.js +1 -1
  35. package/dist/packageVersion.js.map +1 -1
  36. package/dist/retry.js +2 -2
  37. package/dist/retry.js.map +1 -1
  38. package/dist/test-utils-alpha.d.ts +38 -37
  39. package/dist/test-utils-beta.d.ts +40 -37
  40. package/dist/test-utils-public.d.ts +40 -37
  41. package/dist/test-utils-untrimmed.d.ts +71 -50
  42. package/dist/testContainerRuntimeFactory.d.ts +5 -5
  43. package/dist/testContainerRuntimeFactory.d.ts.map +1 -1
  44. package/dist/testContainerRuntimeFactory.js +16 -14
  45. package/dist/testContainerRuntimeFactory.js.map +1 -1
  46. package/dist/testContainerRuntimeFactoryWithDefaultDataStore.d.ts +5 -5
  47. package/dist/testContainerRuntimeFactoryWithDefaultDataStore.d.ts.map +1 -1
  48. package/dist/testContainerRuntimeFactoryWithDefaultDataStore.js +2 -2
  49. package/dist/testContainerRuntimeFactoryWithDefaultDataStore.js.map +1 -1
  50. package/dist/testFluidObject.d.ts +2 -2
  51. package/dist/testFluidObject.d.ts.map +1 -1
  52. package/dist/testFluidObject.js +7 -7
  53. package/dist/testFluidObject.js.map +1 -1
  54. package/dist/testObjectProvider.d.ts +40 -20
  55. package/dist/testObjectProvider.d.ts.map +1 -1
  56. package/dist/testObjectProvider.js +61 -44
  57. package/dist/testObjectProvider.js.map +1 -1
  58. package/dist/timeoutUtils.js +4 -4
  59. package/dist/timeoutUtils.js.map +1 -1
  60. package/lib/DriverWrappers.d.ts +1 -1
  61. package/lib/DriverWrappers.d.ts.map +1 -1
  62. package/lib/DriverWrappers.js.map +1 -1
  63. package/lib/TestSummaryUtils.d.ts +4 -4
  64. package/lib/TestSummaryUtils.d.ts.map +1 -1
  65. package/lib/TestSummaryUtils.js +4 -4
  66. package/lib/TestSummaryUtils.js.map +1 -1
  67. package/lib/containerUtils.d.ts +2 -2
  68. package/lib/containerUtils.d.ts.map +1 -1
  69. package/lib/containerUtils.js +1 -1
  70. package/lib/containerUtils.js.map +1 -1
  71. package/lib/debug.d.ts.map +1 -1
  72. package/lib/debug.js.map +1 -1
  73. package/lib/index.d.ts +1 -1
  74. package/lib/index.d.ts.map +1 -1
  75. package/lib/index.js.map +1 -1
  76. package/lib/interfaces.d.ts +1 -1
  77. package/lib/interfaces.d.ts.map +1 -1
  78. package/lib/interfaces.js.map +1 -1
  79. package/lib/loaderContainerTracker.d.ts +1 -1
  80. package/lib/loaderContainerTracker.d.ts.map +1 -1
  81. package/lib/loaderContainerTracker.js +2 -2
  82. package/lib/loaderContainerTracker.js.map +1 -1
  83. package/lib/localCodeLoader.d.ts +3 -3
  84. package/lib/localCodeLoader.d.ts.map +1 -1
  85. package/lib/localCodeLoader.js +2 -2
  86. package/lib/localCodeLoader.js.map +1 -1
  87. package/lib/localLoader.d.ts +2 -2
  88. package/lib/localLoader.d.ts.map +1 -1
  89. package/lib/localLoader.js +1 -1
  90. package/lib/localLoader.js.map +1 -1
  91. package/lib/packageVersion.d.ts +1 -1
  92. package/lib/packageVersion.js +1 -1
  93. package/lib/packageVersion.js.map +1 -1
  94. package/lib/retry.js +1 -1
  95. package/lib/retry.js.map +1 -1
  96. package/lib/test-utils-alpha.d.ts +38 -37
  97. package/lib/test-utils-beta.d.ts +40 -37
  98. package/lib/test-utils-public.d.ts +40 -37
  99. package/lib/test-utils-untrimmed.d.ts +71 -50
  100. package/lib/testContainerRuntimeFactory.d.ts +5 -5
  101. package/lib/testContainerRuntimeFactory.d.ts.map +1 -1
  102. package/lib/testContainerRuntimeFactory.js +10 -6
  103. package/lib/testContainerRuntimeFactory.js.map +1 -1
  104. package/lib/testContainerRuntimeFactoryWithDefaultDataStore.d.ts +5 -5
  105. package/lib/testContainerRuntimeFactoryWithDefaultDataStore.d.ts.map +1 -1
  106. package/lib/testContainerRuntimeFactoryWithDefaultDataStore.js +1 -1
  107. package/lib/testContainerRuntimeFactoryWithDefaultDataStore.js.map +1 -1
  108. package/lib/testFluidObject.d.ts +2 -2
  109. package/lib/testFluidObject.d.ts.map +1 -1
  110. package/lib/testFluidObject.js +3 -3
  111. package/lib/testFluidObject.js.map +1 -1
  112. package/lib/testObjectProvider.d.ts +40 -20
  113. package/lib/testObjectProvider.d.ts.map +1 -1
  114. package/lib/testObjectProvider.js +56 -39
  115. package/lib/testObjectProvider.js.map +1 -1
  116. package/lib/timeoutUtils.js +1 -1
  117. package/lib/timeoutUtils.js.map +1 -1
  118. package/lib/tsdoc-metadata.json +11 -0
  119. package/package.json +26 -35
  120. package/src/DriverWrappers.ts +1 -1
  121. package/src/TestSummaryUtils.ts +11 -6
  122. package/src/containerUtils.ts +4 -3
  123. package/src/debug.ts +1 -0
  124. package/src/index.ts +1 -0
  125. package/src/interfaces.ts +1 -1
  126. package/src/loaderContainerTracker.ts +6 -4
  127. package/src/localCodeLoader.ts +6 -5
  128. package/src/localLoader.ts +4 -3
  129. package/src/packageVersion.ts +1 -1
  130. package/src/retry.ts +1 -1
  131. package/src/testContainerRuntimeFactory.ts +14 -9
  132. package/src/testContainerRuntimeFactoryWithDefaultDataStore.ts +5 -5
  133. package/src/testFluidObject.ts +5 -4
  134. package/src/testObjectProvider.ts +120 -70
  135. package/src/timeoutUtils.ts +1 -1
  136. package/lib/test/timeoutUtils.spec.js +0 -165
  137. package/lib/test/timeoutUtils.spec.js.map +0 -1
  138. package/lib/test/types/validateTestUtilsPrevious.generated.js +0 -90
  139. package/lib/test/types/validateTestUtilsPrevious.generated.js.map +0 -1
@@ -9,10 +9,11 @@ import {
9
9
  IFluidCodeDetails,
10
10
  IHostLoader,
11
11
  ILoaderOptions,
12
- } from "@fluidframework/container-definitions";
13
- import { Loader } from "@fluidframework/container-loader";
12
+ } from "@fluidframework/container-definitions/internal";
13
+ import { Loader } from "@fluidframework/container-loader/internal";
14
14
  import { IRequest, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
15
- import { IDocumentServiceFactory, IUrlResolver } from "@fluidframework/driver-definitions";
15
+ import { IDocumentServiceFactory, IUrlResolver } from "@fluidframework/driver-definitions/internal";
16
+
16
17
  import { LocalCodeLoader, fluidEntryPoint } from "./localCodeLoader.js";
17
18
 
18
19
  /**
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/test-utils";
9
- export const pkgVersion = "2.0.0-dev-rc.3.0.0.250606";
9
+ export const pkgVersion = "2.0.0-dev-rc.3.0.0.254274";
package/src/retry.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { delay } from "@fluidframework/core-utils";
6
+ import { delay } from "@fluidframework/core-utils/internal";
7
7
 
8
8
  const retry = async <T>(
9
9
  callback: () => Promise<T>,
@@ -3,27 +3,30 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { IContainerContext, IRuntime } from "@fluidframework/container-definitions";
6
+ import { IContainerContext, IRuntime } from "@fluidframework/container-definitions/internal";
7
7
  import {
8
8
  ContainerRuntime,
9
9
  DefaultSummaryConfiguration,
10
10
  IContainerRuntimeOptions,
11
- } from "@fluidframework/container-runtime";
12
- import { IContainerRuntime } from "@fluidframework/container-runtime-definitions";
11
+ } from "@fluidframework/container-runtime/internal";
12
+ import { IContainerRuntime } from "@fluidframework/container-runtime-definitions/internal";
13
13
  import {
14
14
  FluidObject,
15
15
  IFluidHandleContext,
16
16
  IRequest,
17
17
  IResponse,
18
18
  } from "@fluidframework/core-interfaces";
19
- import { assert } from "@fluidframework/core-utils";
20
- // eslint-disable-next-line import/no-deprecated
21
- import { RuntimeRequestHandler, buildRuntimeRequestHandler } from "@fluidframework/request-handler";
19
+ import { assert } from "@fluidframework/core-utils/internal";
20
+ import {
21
+ RuntimeRequestHandler,
22
+ // eslint-disable-next-line import/no-deprecated
23
+ buildRuntimeRequestHandler,
24
+ } from "@fluidframework/request-handler/internal";
22
25
  import {
23
26
  IFluidDataStoreFactory,
24
27
  NamedFluidDataStoreRegistryEntries,
25
- } from "@fluidframework/runtime-definitions";
26
- import { RequestParser, RuntimeFactoryHelper } from "@fluidframework/runtime-utils";
28
+ } from "@fluidframework/runtime-definitions/internal";
29
+ import { RequestParser, RuntimeFactoryHelper } from "@fluidframework/runtime-utils/internal";
27
30
 
28
31
  interface backCompat_IFluidRouter {
29
32
  IFluidRouter?: backCompat_IFluidRouter;
@@ -89,7 +92,7 @@ export const createTestContainerRuntimeFactory = (
89
92
  const rootContext =
90
93
  "createDetachedRootDataStore" in runtime
91
94
  ? (runtime as any).createDetachedRootDataStore([this.type], "default")
92
- : runtime.createDetachedDataStore([this.type], "default");
95
+ : runtime.createDetachedDataStore([this.type]);
93
96
 
94
97
  const rootRuntime = await this.dataStoreFactory.instantiateDataStore(
95
98
  rootContext,
@@ -130,6 +133,7 @@ export const createTestContainerRuntimeFactory = (
130
133
  ["default", Promise.resolve(this.dataStoreFactory)],
131
134
  [this.type, Promise.resolve(this.dataStoreFactory)],
132
135
  ],
136
+ // eslint-disable-next-line import/no-deprecated
133
137
  buildRuntimeRequestHandler(
134
138
  backCompat_DefaultRouteRequestHandler("default"),
135
139
  ...this.requestHandlers,
@@ -163,6 +167,7 @@ export const createTestContainerRuntimeFactory = (
163
167
  ["default", Promise.resolve(this.dataStoreFactory)],
164
168
  [this.type, Promise.resolve(this.dataStoreFactory)],
165
169
  ],
170
+ // eslint-disable-next-line import/no-deprecated
166
171
  requestHandler: buildRuntimeRequestHandler(
167
172
  getDefaultObject,
168
173
  ...this.requestHandlers,
@@ -3,15 +3,15 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ContainerRuntimeFactoryWithDefaultDataStore } from "@fluidframework/aqueduct";
7
- import { IContainerRuntimeOptions } from "@fluidframework/container-runtime";
8
- import { IContainerRuntime } from "@fluidframework/container-runtime-definitions";
6
+ import { ContainerRuntimeFactoryWithDefaultDataStore } from "@fluidframework/aqueduct/internal";
7
+ import { IContainerRuntimeOptions } from "@fluidframework/container-runtime/internal";
8
+ import { IContainerRuntime } from "@fluidframework/container-runtime-definitions/internal";
9
9
  import { FluidObject } from "@fluidframework/core-interfaces";
10
- import { RuntimeRequestHandler } from "@fluidframework/request-handler";
10
+ import { RuntimeRequestHandler } from "@fluidframework/request-handler/internal";
11
11
  import {
12
12
  IFluidDataStoreFactory,
13
13
  NamedFluidDataStoreRegistryEntries,
14
- } from "@fluidframework/runtime-definitions";
14
+ } from "@fluidframework/runtime-definitions/internal";
15
15
 
16
16
  const getDefaultFluidObject = async (runtime: IContainerRuntime) => {
17
17
  const entryPoint = await runtime.getAliasedDataStoreEntryPoint("default");
@@ -4,20 +4,21 @@
4
4
  */
5
5
 
6
6
  import { IFluidHandle, IRequest, IResponse } from "@fluidframework/core-interfaces";
7
- import { assert } from "@fluidframework/core-utils";
7
+ import { assert } from "@fluidframework/core-utils/internal";
8
8
  import {
9
9
  FluidDataStoreRuntime,
10
10
  FluidObjectHandle,
11
11
  mixinRequestHandler,
12
- } from "@fluidframework/datastore";
12
+ } from "@fluidframework/datastore/internal";
13
13
  import { IChannelFactory, IFluidDataStoreRuntime } from "@fluidframework/datastore-definitions";
14
14
  import { ISharedMap, SharedMap } from "@fluidframework/map";
15
15
  import {
16
16
  IFluidDataStoreChannel,
17
17
  IFluidDataStoreContext,
18
18
  IFluidDataStoreFactory,
19
- } from "@fluidframework/runtime-definitions";
20
- import { create404Response } from "@fluidframework/runtime-utils";
19
+ } from "@fluidframework/runtime-definitions/internal";
20
+ import { create404Response } from "@fluidframework/runtime-utils/internal";
21
+
21
22
  import { ITestFluidObject } from "./interfaces.js";
22
23
 
23
24
  /**
@@ -3,18 +3,20 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ import { assert } from "@fluidframework/core-utils/internal";
7
+ import { ITestDriver, TestDriverTypes } from "@fluid-internal/test-driver-definitions";
6
8
  import {
7
9
  IContainer,
8
10
  IFluidCodeDetails,
9
11
  IHostLoader,
10
12
  ILoader,
11
- } from "@fluidframework/container-definitions";
13
+ } from "@fluidframework/container-definitions/internal";
12
14
  import {
13
15
  ILoaderProps,
14
16
  Loader,
15
17
  waitContainerToCatchUp as waitContainerToCatchUp_original,
16
- } from "@fluidframework/container-loader";
17
- import { IContainerRuntimeOptions } from "@fluidframework/container-runtime";
18
+ } from "@fluidframework/container-loader/internal";
19
+ import { IContainerRuntimeOptions } from "@fluidframework/container-runtime/internal";
18
20
  import {
19
21
  IRequestHeader,
20
22
  ITelemetryBaseEvent,
@@ -24,14 +26,15 @@ import {
24
26
  IDocumentServiceFactory,
25
27
  IResolvedUrl,
26
28
  IUrlResolver,
27
- } from "@fluidframework/driver-definitions";
29
+ } from "@fluidframework/driver-definitions/internal";
30
+ import { type ITelemetryGenericEventExt } from "@fluidframework/telemetry-utils";
28
31
  import {
29
- type ITelemetryGenericEventExt,
30
32
  createChildLogger,
31
33
  createMultiSinkLogger,
32
- } from "@fluidframework/telemetry-utils";
33
- import { ITestDriver, TestDriverTypes } from "@fluidframework/test-driver-definitions";
34
+ type ITelemetryLoggerPropertyBags,
35
+ } from "@fluidframework/telemetry-utils/internal";
34
36
  import { v4 as uuid } from "uuid";
37
+
35
38
  import { LoaderContainerTracker } from "./loaderContainerTracker.js";
36
39
  import { LocalCodeLoader, fluidEntryPoint } from "./localCodeLoader.js";
37
40
  import { createAndAttachContainer } from "./localLoader.js";
@@ -79,7 +82,12 @@ export interface ITestObjectProvider {
79
82
  /**
80
83
  * Logger used to track expected and unexpected events.
81
84
  */
82
- logger: EventAndErrorTrackingLogger | undefined;
85
+ logger: ITelemetryBaseLogger;
86
+
87
+ /**
88
+ * Logger used to track expected and unexpected events.
89
+ */
90
+ tracker: IEventAndErrorTrackingLogger;
83
91
 
84
92
  /**
85
93
  * Used to create a url for the created container with any data store path given in the relative url.
@@ -177,6 +185,7 @@ export interface ITestObjectProvider {
177
185
  loadTestContainer(
178
186
  testContainerConfig?: ITestContainerConfig,
179
187
  requestHeader?: IRequestHeader,
188
+ pendingLocalState?: string,
180
189
  ): Promise<IContainer>;
181
190
 
182
191
  /**
@@ -285,6 +294,15 @@ function getDocumentIdStrategy(type?: TestDriverTypes): IDocumentIdStrategy {
285
294
  }
286
295
  }
287
296
 
297
+ /** @internal */
298
+ export interface IEventAndErrorTrackingLogger {
299
+ registerExpectedEvent: (...orderedExpectedEvents: ITelemetryGenericEventExt[]) => void;
300
+ reportAndClearTrackedEvents: () => {
301
+ expectedNotFound: { index: number; event: ITelemetryGenericEventExt }[];
302
+ unexpectedErrors: ITelemetryBaseEvent[];
303
+ };
304
+ }
305
+
288
306
  /**
289
307
  * This class tracks events. It allows specifying expected events, which will be looked for in order.
290
308
  * It also tracks all unexpected errors.
@@ -292,7 +310,9 @@ function getDocumentIdStrategy(type?: TestDriverTypes): IDocumentIdStrategy {
292
310
  * any expected events that have not occurred.
293
311
  * @internal
294
312
  */
295
- export class EventAndErrorTrackingLogger implements ITelemetryBaseLogger {
313
+ export class EventAndErrorTrackingLogger
314
+ implements ITelemetryBaseLogger, IEventAndErrorTrackingLogger
315
+ {
296
316
  /**
297
317
  * Even if these error events are logged, tests should still be allowed to pass
298
318
  * Additionally, if downgrade is true, then log as generic (e.g. to avoid polluting the e2e test logs)
@@ -307,12 +327,9 @@ export class EventAndErrorTrackingLogger implements ITelemetryBaseLogger {
307
327
  { eventName: "fluid:telemetry:OpPerf:OpRoundtripTime" },
308
328
  ];
309
329
 
310
- constructor(private readonly baseLogger: ITelemetryBaseLogger) {}
330
+ constructor(private readonly baseLogger?: ITelemetryBaseLogger) {}
311
331
 
312
- private readonly expectedEvents: (
313
- | { index: number; event: ITelemetryGenericEventExt | undefined }
314
- | undefined
315
- )[] = [];
332
+ private readonly expectedEvents: { index: number; event: ITelemetryGenericEventExt }[] = [];
316
333
  private readonly unexpectedErrors: ITelemetryBaseEvent[] = [];
317
334
 
318
335
  public registerExpectedEvent(...orderedExpectedEvents: ITelemetryGenericEventExt[]) {
@@ -330,24 +347,26 @@ export class EventAndErrorTrackingLogger implements ITelemetryBaseLogger {
330
347
  }
331
348
 
332
349
  send(event: ITelemetryBaseEvent): void {
333
- const ee = this.expectedEvents[0]?.event;
334
- if (ee?.eventName === event.eventName) {
335
- let matches = true;
336
- for (const key of Object.keys(ee)) {
337
- if (ee[key] !== event[key]) {
338
- matches = false;
339
- break;
350
+ if (this.expectedEvents.length > 0) {
351
+ const ee = this.expectedEvents[0].event;
352
+ if (ee.eventName === event.eventName) {
353
+ let matches = true;
354
+ for (const key of Object.keys(ee)) {
355
+ if (ee[key] !== event[key]) {
356
+ matches = false;
357
+ break;
358
+ }
340
359
  }
341
- }
342
- if (matches) {
343
- // we found an expected event
344
- // so remove it from the list of expected events
345
- // and if it is an error, change it to generic
346
- // this helps keep our telemetry clear of
347
- // expected errors.
348
- this.expectedEvents.shift();
349
- if (event.category === "error") {
350
- event.category = "generic";
360
+ if (matches) {
361
+ // we found an expected event
362
+ // so remove it from the list of expected events
363
+ // and if it is an error, change it to generic
364
+ // this helps keep our telemetry clear of
365
+ // expected errors.
366
+ this.expectedEvents.shift();
367
+ if (event.category === "error") {
368
+ event.category = "generic";
369
+ }
351
370
  }
352
371
  }
353
372
  }
@@ -364,7 +383,7 @@ export class EventAndErrorTrackingLogger implements ITelemetryBaseLogger {
364
383
  }
365
384
  }
366
385
 
367
- this.baseLogger.send(event);
386
+ this.baseLogger?.send(event);
368
387
  }
369
388
 
370
389
  public reportAndClearTrackedEvents() {
@@ -389,7 +408,8 @@ export class TestObjectProvider implements ITestObjectProvider {
389
408
  private _loaderContainerTracker = new LoaderContainerTracker();
390
409
  private _documentServiceFactory: IDocumentServiceFactory | undefined;
391
410
  private _urlResolver: IUrlResolver | undefined;
392
- private _logger: EventAndErrorTrackingLogger | undefined;
411
+ private _logger: ITelemetryBaseLogger | undefined;
412
+ private _tracker: EventAndErrorTrackingLogger | undefined;
393
413
  private readonly _documentIdStrategy: IDocumentIdStrategy;
394
414
  // Since documentId doesn't change we can only create/make one container. Call the load functions instead.
395
415
  private _documentCreated = false;
@@ -418,27 +438,29 @@ export class TestObjectProvider implements ITestObjectProvider {
418
438
  /**
419
439
  * {@inheritDoc ITestObjectProvider.logger}
420
440
  */
421
- public get logger(): EventAndErrorTrackingLogger {
441
+ public get logger(): ITelemetryBaseLogger {
422
442
  if (this._logger === undefined) {
423
- this._logger = new EventAndErrorTrackingLogger(
424
- createChildLogger({
425
- logger: getTestLogger?.(),
426
- properties: {
427
- all: {
428
- driverType: this.driver.type,
429
- driverEndpointName: this.driver.endpointName,
430
- driverTenantName: this.driver.tenantName,
431
- driverUserIndex: this.driver.userIndex,
432
- },
443
+ this._tracker = new EventAndErrorTrackingLogger(getTestLogger?.());
444
+ this._logger = createChildLogger({
445
+ logger: this._tracker,
446
+ properties: {
447
+ all: {
448
+ testType: this.type,
449
+ driverType: this.driver.type,
450
+ driverEndpointName: this.driver.endpointName,
451
+ driverTenantName: this.driver.tenantName,
452
+ driverUserIndex: this.driver.userIndex,
433
453
  },
434
- }),
435
- );
454
+ },
455
+ });
436
456
  }
437
457
  return this._logger;
438
458
  }
439
459
 
440
- private set logger(logger: EventAndErrorTrackingLogger) {
441
- this._logger = logger;
460
+ public get tracker() {
461
+ void this.logger;
462
+ assert(this._tracker !== undefined, "should be initialized");
463
+ return this._tracker;
442
464
  }
443
465
 
444
466
  /**
@@ -569,11 +591,18 @@ export class TestObjectProvider implements ITestObjectProvider {
569
591
  return this.resolveContainer(loader, requestHeader);
570
592
  }
571
593
 
572
- private async resolveContainer(loader: ILoader, headers?: IRequestHeader) {
573
- return loader.resolve({
574
- url: await this.driver.createContainerUrl(this.documentId),
575
- headers,
576
- });
594
+ private async resolveContainer(
595
+ loader: ILoader,
596
+ headers?: IRequestHeader,
597
+ pendingLocalState?: string,
598
+ ) {
599
+ return loader.resolve(
600
+ {
601
+ url: await this.driver.createContainerUrl(this.documentId),
602
+ headers,
603
+ },
604
+ pendingLocalState,
605
+ );
577
606
  }
578
607
 
579
608
  /**
@@ -616,10 +645,11 @@ export class TestObjectProvider implements ITestObjectProvider {
616
645
  public async loadTestContainer(
617
646
  testContainerConfig?: ITestContainerConfig,
618
647
  requestHeader?: IRequestHeader,
648
+ pendingLocalState?: string,
619
649
  ): Promise<IContainer> {
620
650
  const loader = this.makeTestLoader(testContainerConfig);
621
651
 
622
- const container = await this.resolveContainer(loader, requestHeader);
652
+ const container = await this.resolveContainer(loader, requestHeader, pendingLocalState);
623
653
  await this.waitContainerToCatchUp(container);
624
654
 
625
655
  return container;
@@ -633,11 +663,12 @@ export class TestObjectProvider implements ITestObjectProvider {
633
663
  this._documentServiceFactory = undefined;
634
664
  this._urlResolver = undefined;
635
665
  this._documentIdStrategy.reset();
636
- const logError = getUnexpectedLogErrorException(this._logger);
666
+ const logError = getUnexpectedLogErrorException(this._tracker);
637
667
  if (logError) {
638
668
  throw logError;
639
669
  }
640
670
  this._logger = undefined;
671
+ this._tracker = undefined;
641
672
  this._documentCreated = false;
642
673
  }
643
674
 
@@ -687,7 +718,8 @@ export class TestObjectProviderWithVersionedLoad implements ITestObjectProvider
687
718
  */
688
719
  public readonly type = "TestObjectProviderWithVersionedLoad";
689
720
  private _loaderContainerTracker = new LoaderContainerTracker();
690
- private _logger: EventAndErrorTrackingLogger | undefined;
721
+ private _logger: ITelemetryBaseLogger | undefined;
722
+ private _tracker: EventAndErrorTrackingLogger | undefined;
691
723
  private readonly _documentIdStrategy: IDocumentIdStrategy;
692
724
  private _documentServiceFactory: IDocumentServiceFactory | undefined;
693
725
  private _urlResolver: IUrlResolver | undefined;
@@ -713,6 +745,7 @@ export class TestObjectProviderWithVersionedLoad implements ITestObjectProvider
713
745
  private readonly createFluidEntryPointForLoading: (
714
746
  testContainerConfig?: ITestContainerConfig,
715
747
  ) => fluidEntryPoint,
748
+ private readonly telemetryProps?: ITelemetryLoggerPropertyBags,
716
749
  ) {
717
750
  this._documentIdStrategy = getDocumentIdStrategy(driverForCreating.type);
718
751
  }
@@ -720,17 +753,23 @@ export class TestObjectProviderWithVersionedLoad implements ITestObjectProvider
720
753
  /**
721
754
  * {@inheritDoc ITestObjectProvider.logger}
722
755
  */
723
- public get logger(): EventAndErrorTrackingLogger {
756
+ public get logger() {
724
757
  if (this._logger === undefined) {
725
- this._logger = new EventAndErrorTrackingLogger(
726
- createChildLogger({
727
- logger: getTestLogger?.(),
728
- }),
729
- );
758
+ this._tracker = new EventAndErrorTrackingLogger(getTestLogger?.());
759
+ this._logger = createChildLogger({
760
+ logger: this._tracker,
761
+ properties: this.telemetryProps,
762
+ });
730
763
  }
731
764
  return this._logger;
732
765
  }
733
766
 
767
+ public get tracker() {
768
+ void this.logger;
769
+ assert(this._tracker !== undefined, "should be initialized");
770
+ return this._tracker;
771
+ }
772
+
734
773
  /**
735
774
  * {@inheritDoc ITestObjectProvider.documentServiceFactory}
736
775
  */
@@ -920,12 +959,16 @@ export class TestObjectProviderWithVersionedLoad implements ITestObjectProvider
920
959
  loader: ILoader,
921
960
  headers?: IRequestHeader,
922
961
  driver?: ITestDriver,
962
+ pendingLocalState?: string,
923
963
  ) {
924
- return loader.resolve({
925
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
926
- url: await driver!.createContainerUrl(this.documentId),
927
- headers,
928
- });
964
+ return loader.resolve(
965
+ {
966
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
967
+ url: await driver!.createContainerUrl(this.documentId),
968
+ headers,
969
+ },
970
+ pendingLocalState,
971
+ );
929
972
  }
930
973
 
931
974
  /**
@@ -972,11 +1015,17 @@ export class TestObjectProviderWithVersionedLoad implements ITestObjectProvider
972
1015
  public async loadTestContainer(
973
1016
  testContainerConfig?: ITestContainerConfig,
974
1017
  requestHeader?: IRequestHeader,
1018
+ pendingLocalState?: string,
975
1019
  ): Promise<IContainer> {
976
1020
  // Keep track of which Loader we are about to use so we can pass the correct driver through
977
1021
  const driver = this.useCreateApi ? this.driverForCreating : this.driverForLoading;
978
1022
  const loader = this.makeTestLoader(testContainerConfig);
979
- const container = await this.resolveContainer(loader, requestHeader, driver);
1023
+ const container = await this.resolveContainer(
1024
+ loader,
1025
+ requestHeader,
1026
+ driver,
1027
+ pendingLocalState,
1028
+ );
980
1029
  await this.waitContainerToCatchUp(container);
981
1030
 
982
1031
  return container;
@@ -989,10 +1038,11 @@ export class TestObjectProviderWithVersionedLoad implements ITestObjectProvider
989
1038
  this.useCreateApi = true;
990
1039
  this._loaderContainerTracker.reset();
991
1040
  this._logger = undefined;
1041
+ this._tracker = undefined;
992
1042
  this._documentServiceFactory = undefined;
993
1043
  this._urlResolver = undefined;
994
1044
  this._documentIdStrategy.reset();
995
- const logError = getUnexpectedLogErrorException(this._logger);
1045
+ const logError = getUnexpectedLogErrorException(this._tracker);
996
1046
  if (logError) {
997
1047
  throw logError;
998
1048
  }
@@ -1038,7 +1088,7 @@ export class TestObjectProviderWithVersionedLoad implements ITestObjectProvider
1038
1088
  * @internal
1039
1089
  */
1040
1090
  export function getUnexpectedLogErrorException(
1041
- logger: EventAndErrorTrackingLogger | undefined,
1091
+ logger: IEventAndErrorTrackingLogger | undefined,
1042
1092
  prefix?: string,
1043
1093
  ) {
1044
1094
  if (logger === undefined) {
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert, Deferred } from "@fluidframework/core-utils";
6
+ import { assert, Deferred } from "@fluidframework/core-utils/internal";
7
7
  import type * as Mocha from "mocha";
8
8
 
9
9
  // @deprecated this value is no longer used