@fluidframework/test-utils 2.0.0-dev.3.1.0.125672 → 2.0.0-dev.4.2.0.153917

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 (40) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/TestConfigs.d.ts.map +1 -1
  3. package/dist/TestConfigs.js +0 -2
  4. package/dist/TestConfigs.js.map +1 -1
  5. package/dist/TestSummaryUtils.d.ts +14 -3
  6. package/dist/TestSummaryUtils.d.ts.map +1 -1
  7. package/dist/TestSummaryUtils.js +24 -16
  8. package/dist/TestSummaryUtils.js.map +1 -1
  9. package/dist/containerUtils.d.ts +10 -19
  10. package/dist/containerUtils.d.ts.map +1 -1
  11. package/dist/containerUtils.js +12 -25
  12. package/dist/containerUtils.js.map +1 -1
  13. package/dist/index.d.ts +2 -2
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -3
  16. package/dist/index.js.map +1 -1
  17. package/dist/loaderContainerTracker.d.ts +30 -15
  18. package/dist/loaderContainerTracker.d.ts.map +1 -1
  19. package/dist/loaderContainerTracker.js +138 -58
  20. package/dist/loaderContainerTracker.js.map +1 -1
  21. package/dist/packageVersion.d.ts +1 -1
  22. package/dist/packageVersion.js +1 -1
  23. package/dist/packageVersion.js.map +1 -1
  24. package/dist/testObjectProvider.d.ts +7 -1
  25. package/dist/testObjectProvider.d.ts.map +1 -1
  26. package/dist/testObjectProvider.js +44 -15
  27. package/dist/testObjectProvider.js.map +1 -1
  28. package/dist/timeoutUtils.d.ts +0 -2
  29. package/dist/timeoutUtils.d.ts.map +1 -1
  30. package/dist/timeoutUtils.js +1 -7
  31. package/dist/timeoutUtils.js.map +1 -1
  32. package/package.json +62 -63
  33. package/src/TestConfigs.ts +0 -2
  34. package/src/TestSummaryUtils.ts +23 -30
  35. package/src/containerUtils.ts +12 -25
  36. package/src/index.ts +2 -7
  37. package/src/loaderContainerTracker.ts +174 -72
  38. package/src/packageVersion.ts +1 -1
  39. package/src/testObjectProvider.ts +72 -16
  40. package/src/timeoutUtils.ts +0 -7
@@ -3,7 +3,13 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { IContainer, IHostLoader, IFluidCodeDetails } from "@fluidframework/container-definitions";
6
+ import {
7
+ IContainer,
8
+ IHostLoader,
9
+ IFluidCodeDetails,
10
+ LoaderHeader,
11
+ ILoader,
12
+ } from "@fluidframework/container-definitions";
7
13
  import {
8
14
  ITelemetryGenericEvent,
9
15
  ITelemetryBaseLogger,
@@ -107,6 +113,9 @@ export interface ITestContainerConfig {
107
113
 
108
114
  /** Loader options for the loader used to create containers */
109
115
  loaderProps?: Partial<ILoaderProps>;
116
+
117
+ /** Temporary flag: simulate read connection using delay connection, default is true */
118
+ simulateReadConnectionUsingDelay?: boolean;
110
119
  }
111
120
 
112
121
  export const createDocumentId = (): string => uuid();
@@ -154,10 +163,18 @@ function getDocumentIdStrategy(type?: TestDriverTypes): IDocumentIdStrategy {
154
163
  * any expected events that have not occurred.
155
164
  */
156
165
  export class EventAndErrorTrackingLogger extends TelemetryLogger {
157
- /** Even if these error events are logged, tests should still be allowed to pass */
158
- private readonly allowedErrors: string[] = [
166
+ /**
167
+ * Even if these error events are logged, tests should still be allowed to pass
168
+ * Additionally, if downgrade is true, then log as generic (e.g. to avoid polluting the e2e test logs)
169
+ */
170
+ private readonly allowedErrors: { eventName: string; downgrade?: true }[] = [
159
171
  // This log was removed in current version as unnecessary, but it's still present in previous versions
160
- "fluid:telemetry:Container:NoRealStorageInDetachedContainer",
172
+ {
173
+ eventName: "fluid:telemetry:Container:NoRealStorageInDetachedContainer",
174
+ downgrade: true,
175
+ },
176
+ // This log's category changes depending on the op latency. test results shouldn't be affected but if we see lots we'd like an alert from the logs.
177
+ { eventName: "fluid:telemetry:OpPerf:OpRoundtripTime" },
161
178
  ];
162
179
 
163
180
  constructor(private readonly baseLogger: ITelemetryBaseLogger) {
@@ -207,10 +224,15 @@ export class EventAndErrorTrackingLogger extends TelemetryLogger {
207
224
  }
208
225
  }
209
226
  if (event.category === "error") {
210
- if (this.allowedErrors.includes(event.eventName)) {
211
- event.category = "generic";
212
- } else {
227
+ // Check to see if this error is allowed and if its category should be downgraded
228
+ const allowedError = this.allowedErrors.find(
229
+ ({ eventName }) => eventName === event.eventName,
230
+ );
231
+
232
+ if (allowedError === undefined) {
213
233
  this.unexpectedErrors.push(event);
234
+ } else if (allowedError.downgrade) {
235
+ event.category = "generic";
214
236
  }
215
237
  }
216
238
 
@@ -364,10 +386,44 @@ export class TestObjectProvider implements ITestObjectProvider {
364
386
  requestHeader?: IRequestHeader,
365
387
  ): Promise<IContainer> {
366
388
  const loader = this.createLoader([[defaultCodeDetails, entryPoint]], loaderProps);
367
- return loader.resolve({
389
+ return this.resolveContainer(loader, requestHeader);
390
+ }
391
+
392
+ private async resolveContainer(
393
+ loader: ILoader,
394
+ requestHeader?: IRequestHeader,
395
+ delay: boolean = true,
396
+ ) {
397
+ // Once AB#3889 is done to switch default connection mode to "read" on load, we don't need
398
+ // to load "delayed" across the board. Remove the following code.
399
+ const delayConnection =
400
+ delay &&
401
+ (requestHeader === undefined || requestHeader[LoaderHeader.reconnect] !== false);
402
+ const headers: IRequestHeader | undefined = delayConnection
403
+ ? {
404
+ [LoaderHeader.loadMode]: { deltaConnection: "delayed" },
405
+ ...requestHeader,
406
+ }
407
+ : requestHeader;
408
+
409
+ const container = await loader.resolve({
368
410
  url: await this.driver.createContainerUrl(this.documentId),
369
- headers: requestHeader,
411
+ headers,
370
412
  });
413
+
414
+ // Once AB#3889 is done to switch default connection mode to "read" on load, we don't need
415
+ // to load "delayed" across the board. Remove the following code.
416
+ if (delayConnection) {
417
+ // Older version may not have connect/disconnect. It was add in PR#9439, and available >= 0.59.1000
418
+ const maybeContainer = container as Partial<IContainer>;
419
+ if (maybeContainer.connect !== undefined) {
420
+ container.connect();
421
+ } else {
422
+ // back compat. Remove when we don't support < 0.59.1000
423
+ (container as any).resume();
424
+ }
425
+ }
426
+ return container;
371
427
  }
372
428
 
373
429
  /**
@@ -419,10 +475,12 @@ export class TestObjectProvider implements ITestObjectProvider {
419
475
  requestHeader?: IRequestHeader,
420
476
  ): Promise<IContainer> {
421
477
  const loader = this.makeTestLoader(testContainerConfig);
422
- const container = await loader.resolve({
423
- url: await this.driver.createContainerUrl(this.documentId),
424
- headers: requestHeader,
425
- });
478
+
479
+ const container = await this.resolveContainer(
480
+ loader,
481
+ requestHeader,
482
+ testContainerConfig?.simulateReadConnectionUsingDelay,
483
+ );
426
484
  await this.waitContainerToCatchUp(container);
427
485
 
428
486
  return container;
@@ -442,9 +500,7 @@ export class TestObjectProvider implements ITestObjectProvider {
442
500
  }
443
501
 
444
502
  public async ensureSynchronized(timeoutDuration?: number): Promise<void> {
445
- return this._loaderContainerTracker.ensureSynchronizedWithTimeout
446
- ? this._loaderContainerTracker.ensureSynchronizedWithTimeout(timeoutDuration)
447
- : this._loaderContainerTracker.ensureSynchronized();
503
+ return this._loaderContainerTracker.ensureSynchronized();
448
504
  }
449
505
 
450
506
  public async waitContainerToCatchUp(container: IContainer) {
@@ -3,7 +3,6 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { Container } from "@fluidframework/container-loader";
7
6
  import { assert, Deferred } from "@fluidframework/common-utils";
8
7
 
9
8
  // @deprecated this value is no longer used
@@ -133,12 +132,6 @@ export async function timeoutAwait<T = void>(
133
132
  return Promise.race([promise, timeoutPromise<T>(() => {}, timeoutOptions)]);
134
133
  }
135
134
 
136
- export async function ensureContainerConnected(container: Container): Promise<void> {
137
- if (!container.connected) {
138
- return timeoutPromise((resolve) => container.once("connected", () => resolve()));
139
- }
140
- }
141
-
142
135
  // Create a promise based on the timeout options
143
136
  async function getTimeoutPromise<T = void>(
144
137
  executor: (