@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.
- package/CHANGELOG.md +5 -0
- package/dist/TestConfigs.d.ts.map +1 -1
- package/dist/TestConfigs.js +0 -2
- package/dist/TestConfigs.js.map +1 -1
- package/dist/TestSummaryUtils.d.ts +14 -3
- package/dist/TestSummaryUtils.d.ts.map +1 -1
- package/dist/TestSummaryUtils.js +24 -16
- package/dist/TestSummaryUtils.js.map +1 -1
- package/dist/containerUtils.d.ts +10 -19
- package/dist/containerUtils.d.ts.map +1 -1
- package/dist/containerUtils.js +12 -25
- package/dist/containerUtils.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/loaderContainerTracker.d.ts +30 -15
- package/dist/loaderContainerTracker.d.ts.map +1 -1
- package/dist/loaderContainerTracker.js +138 -58
- package/dist/loaderContainerTracker.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/testObjectProvider.d.ts +7 -1
- package/dist/testObjectProvider.d.ts.map +1 -1
- package/dist/testObjectProvider.js +44 -15
- package/dist/testObjectProvider.js.map +1 -1
- package/dist/timeoutUtils.d.ts +0 -2
- package/dist/timeoutUtils.d.ts.map +1 -1
- package/dist/timeoutUtils.js +1 -7
- package/dist/timeoutUtils.js.map +1 -1
- package/package.json +62 -63
- package/src/TestConfigs.ts +0 -2
- package/src/TestSummaryUtils.ts +23 -30
- package/src/containerUtils.ts +12 -25
- package/src/index.ts +2 -7
- package/src/loaderContainerTracker.ts +174 -72
- package/src/packageVersion.ts +1 -1
- package/src/testObjectProvider.ts +72 -16
- package/src/timeoutUtils.ts +0 -7
|
@@ -3,7 +3,13 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
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
|
-
/**
|
|
158
|
-
|
|
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
|
-
|
|
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
|
|
211
|
-
|
|
212
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
423
|
-
|
|
424
|
-
|
|
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.
|
|
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) {
|
package/src/timeoutUtils.ts
CHANGED
|
@@ -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: (
|