@fluidframework/test-utils 2.90.0 → 2.92.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/CHANGELOG.md +8 -0
- package/README.md +2 -0
- package/dist/eventAndErrorLogger.d.ts +51 -0
- package/dist/eventAndErrorLogger.d.ts.map +1 -0
- package/dist/eventAndErrorLogger.js +116 -0
- package/dist/eventAndErrorLogger.js.map +1 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -5
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +1 -1
- package/dist/testObjectProvider.d.ts +4 -46
- package/dist/testObjectProvider.d.ts.map +1 -1
- package/dist/testObjectProvider.js +6 -113
- package/dist/testObjectProvider.js.map +1 -1
- package/dist/timeoutUtils.d.ts.map +1 -1
- package/dist/timeoutUtils.js +2 -0
- package/dist/timeoutUtils.js.map +1 -1
- package/eslint.config.mts +25 -2
- package/internal.d.ts +1 -1
- package/legacy.d.ts +1 -1
- package/lib/eventAndErrorLogger.d.ts +51 -0
- package/lib/eventAndErrorLogger.d.ts.map +1 -0
- package/lib/eventAndErrorLogger.js +111 -0
- package/lib/eventAndErrorLogger.js.map +1 -0
- package/lib/index.d.ts +7 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +11 -2
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +1 -1
- package/lib/testObjectProvider.d.ts +4 -46
- package/lib/testObjectProvider.d.ts.map +1 -1
- package/lib/testObjectProvider.js +1 -106
- package/lib/testObjectProvider.js.map +1 -1
- package/lib/timeoutUtils.d.ts.map +1 -1
- package/lib/timeoutUtils.js +2 -0
- package/lib/timeoutUtils.js.map +1 -1
- package/package.json +30 -30
- package/src/eventAndErrorLogger.ts +164 -0
- package/src/index.ts +22 -8
- package/src/packageVersion.ts +1 -1
- package/src/testObjectProvider.ts +5 -155
- package/src/timeoutUtils.ts +8 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import type { ITelemetryBaseEvent, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
6
|
+
import type { ITelemetryGenericEventExt } from "@fluidframework/telemetry-utils/internal";
|
|
7
|
+
/** @internal */
|
|
8
|
+
export interface IEventAndErrorTrackingLogger {
|
|
9
|
+
registerExpectedEvent: (...orderedExpectedEvents: ITelemetryGenericEventExt[]) => void;
|
|
10
|
+
reportAndClearTrackedEvents: () => {
|
|
11
|
+
expectedNotFound: {
|
|
12
|
+
index: number;
|
|
13
|
+
event: ITelemetryGenericEventExt;
|
|
14
|
+
}[];
|
|
15
|
+
unexpectedErrors: ITelemetryBaseEvent[];
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* This class tracks events. It allows specifying expected events, which will be looked for in order.
|
|
20
|
+
* It also tracks all unexpected errors.
|
|
21
|
+
* At any point you call reportAndClearTrackedEvents which will provide all unexpected errors, and
|
|
22
|
+
* any expected events that have not occurred.
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export declare class EventAndErrorTrackingLogger implements ITelemetryBaseLogger, IEventAndErrorTrackingLogger {
|
|
26
|
+
private readonly baseLogger?;
|
|
27
|
+
/**
|
|
28
|
+
* Even if these error events are logged, tests should still be allowed to pass
|
|
29
|
+
* Additionally, if downgrade is true, then log as generic (e.g. to avoid polluting the e2e test logs)
|
|
30
|
+
*/
|
|
31
|
+
private readonly allowedErrors;
|
|
32
|
+
constructor(baseLogger?: ITelemetryBaseLogger | undefined);
|
|
33
|
+
private readonly expectedEvents;
|
|
34
|
+
private readonly unexpectedErrors;
|
|
35
|
+
registerExpectedEvent(...orderedExpectedEvents: ITelemetryGenericEventExt[]): void;
|
|
36
|
+
send(event: ITelemetryBaseEvent): void;
|
|
37
|
+
reportAndClearTrackedEvents(): {
|
|
38
|
+
expectedNotFound: {
|
|
39
|
+
index: number;
|
|
40
|
+
event: ITelemetryGenericEventExt;
|
|
41
|
+
}[];
|
|
42
|
+
unexpectedErrors: ITelemetryBaseEvent[];
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Retrieves unexpected errors from a logger and returns them as an exception.
|
|
47
|
+
*
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
export declare function getUnexpectedLogErrorException(logger: IEventAndErrorTrackingLogger | undefined, prefix?: string): Error | undefined;
|
|
51
|
+
//# sourceMappingURL=eventAndErrorLogger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventAndErrorLogger.d.ts","sourceRoot":"","sources":["../src/eventAndErrorLogger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,oBAAoB,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAI1F,gBAAgB;AAChB,MAAM,WAAW,4BAA4B;IAC5C,qBAAqB,EAAE,CAAC,GAAG,qBAAqB,EAAE,yBAAyB,EAAE,KAAK,IAAI,CAAC;IACvF,2BAA2B,EAAE,MAAM;QAClC,gBAAgB,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,yBAAyB,CAAA;SAAE,EAAE,CAAC;QACxE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;KACxC,CAAC;CACF;AAED;;;;;;GAMG;AACH,qBAAa,2BACZ,YAAW,oBAAoB,EAAE,4BAA4B;IAgBjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAdxC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAQ5B;gBAE2B,UAAU,CAAC,kCAAsB;IAE9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6D;IAC5F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAEvD,qBAAqB,CAAC,GAAG,qBAAqB,EAAE,yBAAyB,EAAE,GAAG,IAAI;IAczF,IAAI,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAwC/B,2BAA2B,IAAI;QACrC,gBAAgB,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,yBAAyB,CAAA;SAAE,EAAE,CAAC;QACxE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;KACxC;CAQD;AAgBD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC7C,MAAM,EAAE,4BAA4B,GAAG,SAAS,EAChD,MAAM,CAAC,EAAE,MAAM,GACb,KAAK,GAAG,SAAS,CAuBnB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { isNonEmptyArray } from "./nonEmptyArrayType.js";
|
|
6
|
+
/**
|
|
7
|
+
* This class tracks events. It allows specifying expected events, which will be looked for in order.
|
|
8
|
+
* It also tracks all unexpected errors.
|
|
9
|
+
* At any point you call reportAndClearTrackedEvents which will provide all unexpected errors, and
|
|
10
|
+
* any expected events that have not occurred.
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export class EventAndErrorTrackingLogger {
|
|
14
|
+
constructor(baseLogger) {
|
|
15
|
+
this.baseLogger = baseLogger;
|
|
16
|
+
/**
|
|
17
|
+
* Even if these error events are logged, tests should still be allowed to pass
|
|
18
|
+
* Additionally, if downgrade is true, then log as generic (e.g. to avoid polluting the e2e test logs)
|
|
19
|
+
*/
|
|
20
|
+
this.allowedErrors = [
|
|
21
|
+
// This log was removed in current version as unnecessary, but it's still present in previous versions
|
|
22
|
+
{
|
|
23
|
+
eventName: "fluid:telemetry:Container:NoRealStorageInDetachedContainer",
|
|
24
|
+
downgrade: true,
|
|
25
|
+
},
|
|
26
|
+
// 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.
|
|
27
|
+
{ eventName: "fluid:telemetry:OpRoundtripTime" },
|
|
28
|
+
];
|
|
29
|
+
this.expectedEvents = [];
|
|
30
|
+
this.unexpectedErrors = [];
|
|
31
|
+
}
|
|
32
|
+
registerExpectedEvent(...orderedExpectedEvents) {
|
|
33
|
+
if (this.expectedEvents.length !== 0) {
|
|
34
|
+
// we don't have to error here. just no reason not to. given the events must be
|
|
35
|
+
// ordered it could be tricky to figure out problems around multiple registrations.
|
|
36
|
+
throw new Error("Expected events already registered.\n" +
|
|
37
|
+
"Call reportAndClearTrackedEvents to clear them before registering more");
|
|
38
|
+
}
|
|
39
|
+
this.expectedEvents.push(...orderedExpectedEvents.map((event, index) => ({ index, event })));
|
|
40
|
+
}
|
|
41
|
+
send(event) {
|
|
42
|
+
if (isNonEmptyArray(this.expectedEvents)) {
|
|
43
|
+
const ee = this.expectedEvents[0].event;
|
|
44
|
+
if (ee.eventName === event.eventName) {
|
|
45
|
+
let matches = true;
|
|
46
|
+
for (const key of Object.keys(ee)) {
|
|
47
|
+
if (ee[key] !== event[key]) {
|
|
48
|
+
matches = false;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (matches) {
|
|
53
|
+
// we found an expected event
|
|
54
|
+
// so remove it from the list of expected events
|
|
55
|
+
// and if it is an error, change it to generic
|
|
56
|
+
// this helps keep our telemetry clear of
|
|
57
|
+
// expected errors.
|
|
58
|
+
this.expectedEvents.shift();
|
|
59
|
+
if (event.category === "error") {
|
|
60
|
+
event.category = "generic";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (event.category === "error") {
|
|
66
|
+
// Check to see if this error is allowed and if its category should be downgraded
|
|
67
|
+
const allowedError = this.allowedErrors.find(({ eventName }) => eventName === event.eventName);
|
|
68
|
+
if (allowedError === undefined) {
|
|
69
|
+
this.unexpectedErrors.push(event);
|
|
70
|
+
}
|
|
71
|
+
else if (allowedError.downgrade) {
|
|
72
|
+
event.category = "generic";
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
this.baseLogger?.send(event);
|
|
76
|
+
}
|
|
77
|
+
reportAndClearTrackedEvents() {
|
|
78
|
+
const expectedNotFound = this.expectedEvents.splice(0, this.expectedEvents.length);
|
|
79
|
+
const unexpectedErrors = this.unexpectedErrors.splice(0, this.unexpectedErrors.length);
|
|
80
|
+
return {
|
|
81
|
+
expectedNotFound,
|
|
82
|
+
unexpectedErrors,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Summarize the event with just the primary properties, for succinct output in case of test failure */
|
|
87
|
+
const primaryEventProps = ({ category, eventName, error, errorType, }) => ({
|
|
88
|
+
category,
|
|
89
|
+
eventName,
|
|
90
|
+
error,
|
|
91
|
+
errorType,
|
|
92
|
+
["..."]: "*** Additional properties not shown, see full log for details ***",
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* Retrieves unexpected errors from a logger and returns them as an exception.
|
|
96
|
+
*
|
|
97
|
+
* @internal
|
|
98
|
+
*/
|
|
99
|
+
export function getUnexpectedLogErrorException(logger, prefix) {
|
|
100
|
+
if (logger === undefined) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const results = logger.reportAndClearTrackedEvents();
|
|
104
|
+
if (results.unexpectedErrors.length > 0) {
|
|
105
|
+
return new Error(`${prefix ?? ""}Unexpected Errors in Logs:\n${JSON.stringify(results.unexpectedErrors.map(primaryEventProps), undefined, 2)}`);
|
|
106
|
+
}
|
|
107
|
+
if (results.expectedNotFound.length > 0) {
|
|
108
|
+
return new Error(`${prefix ?? ""}Expected Events not found:\n${JSON.stringify(results.expectedNotFound, undefined, 2)}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=eventAndErrorLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventAndErrorLogger.js","sourceRoot":"","sources":["../src/eventAndErrorLogger.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 type {\n\tITelemetryBaseEvent,\n\tITelemetryBaseLogger,\n} from \"@fluidframework/core-interfaces\";\nimport type { ITelemetryGenericEventExt } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { isNonEmptyArray } from \"./nonEmptyArrayType.js\";\n\n/** @internal */\nexport interface IEventAndErrorTrackingLogger {\n\tregisterExpectedEvent: (...orderedExpectedEvents: ITelemetryGenericEventExt[]) => void;\n\treportAndClearTrackedEvents: () => {\n\t\texpectedNotFound: { index: number; event: ITelemetryGenericEventExt }[];\n\t\tunexpectedErrors: ITelemetryBaseEvent[];\n\t};\n}\n\n/**\n * This class tracks events. It allows specifying expected events, which will be looked for in order.\n * It also tracks all unexpected errors.\n * At any point you call reportAndClearTrackedEvents which will provide all unexpected errors, and\n * any expected events that have not occurred.\n * @internal\n */\nexport class EventAndErrorTrackingLogger\n\timplements ITelemetryBaseLogger, IEventAndErrorTrackingLogger\n{\n\t/**\n\t * Even if these error events are logged, tests should still be allowed to pass\n\t * Additionally, if downgrade is true, then log as generic (e.g. to avoid polluting the e2e test logs)\n\t */\n\tprivate readonly allowedErrors: { eventName: string; downgrade?: true }[] = [\n\t\t// This log was removed in current version as unnecessary, but it's still present in previous versions\n\t\t{\n\t\t\teventName: \"fluid:telemetry:Container:NoRealStorageInDetachedContainer\",\n\t\t\tdowngrade: true,\n\t\t},\n\t\t// 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.\n\t\t{ eventName: \"fluid:telemetry:OpRoundtripTime\" },\n\t];\n\n\tconstructor(private readonly baseLogger?: ITelemetryBaseLogger) {}\n\n\tprivate readonly expectedEvents: { index: number; event: ITelemetryGenericEventExt }[] = [];\n\tprivate readonly unexpectedErrors: ITelemetryBaseEvent[] = [];\n\n\tpublic registerExpectedEvent(...orderedExpectedEvents: ITelemetryGenericEventExt[]): void {\n\t\tif (this.expectedEvents.length !== 0) {\n\t\t\t// we don't have to error here. just no reason not to. given the events must be\n\t\t\t// ordered it could be tricky to figure out problems around multiple registrations.\n\t\t\tthrow new Error(\n\t\t\t\t\"Expected events already registered.\\n\" +\n\t\t\t\t\t\"Call reportAndClearTrackedEvents to clear them before registering more\",\n\t\t\t);\n\t\t}\n\t\tthis.expectedEvents.push(\n\t\t\t...orderedExpectedEvents.map((event, index) => ({ index, event })),\n\t\t);\n\t}\n\n\tsend(event: ITelemetryBaseEvent): void {\n\t\tif (isNonEmptyArray(this.expectedEvents)) {\n\t\t\tconst ee = this.expectedEvents[0].event;\n\t\t\tif (ee.eventName === event.eventName) {\n\t\t\t\tlet matches = true;\n\t\t\t\tfor (const key of Object.keys(ee)) {\n\t\t\t\t\tif (ee[key] !== event[key]) {\n\t\t\t\t\t\tmatches = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (matches) {\n\t\t\t\t\t// we found an expected event\n\t\t\t\t\t// so remove it from the list of expected events\n\t\t\t\t\t// and if it is an error, change it to generic\n\t\t\t\t\t// this helps keep our telemetry clear of\n\t\t\t\t\t// expected errors.\n\t\t\t\t\tthis.expectedEvents.shift();\n\t\t\t\t\tif (event.category === \"error\") {\n\t\t\t\t\t\tevent.category = \"generic\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (event.category === \"error\") {\n\t\t\t// Check to see if this error is allowed and if its category should be downgraded\n\t\t\tconst allowedError = this.allowedErrors.find(\n\t\t\t\t({ eventName }) => eventName === event.eventName,\n\t\t\t);\n\n\t\t\tif (allowedError === undefined) {\n\t\t\t\tthis.unexpectedErrors.push(event);\n\t\t\t} else if (allowedError.downgrade) {\n\t\t\t\tevent.category = \"generic\";\n\t\t\t}\n\t\t}\n\n\t\tthis.baseLogger?.send(event);\n\t}\n\n\tpublic reportAndClearTrackedEvents(): {\n\t\texpectedNotFound: { index: number; event: ITelemetryGenericEventExt }[];\n\t\tunexpectedErrors: ITelemetryBaseEvent[];\n\t} {\n\t\tconst expectedNotFound = this.expectedEvents.splice(0, this.expectedEvents.length);\n\t\tconst unexpectedErrors = this.unexpectedErrors.splice(0, this.unexpectedErrors.length);\n\t\treturn {\n\t\t\texpectedNotFound,\n\t\t\tunexpectedErrors,\n\t\t};\n\t}\n}\n\n/** Summarize the event with just the primary properties, for succinct output in case of test failure */\nconst primaryEventProps = ({\n\tcategory,\n\teventName,\n\terror,\n\terrorType,\n}: ITelemetryBaseEvent): Partial<ITelemetryBaseEvent> => ({\n\tcategory,\n\teventName,\n\terror,\n\terrorType,\n\t[\"...\"]: \"*** Additional properties not shown, see full log for details ***\",\n});\n\n/**\n * Retrieves unexpected errors from a logger and returns them as an exception.\n *\n * @internal\n */\nexport function getUnexpectedLogErrorException(\n\tlogger: IEventAndErrorTrackingLogger | undefined,\n\tprefix?: string,\n): Error | undefined {\n\tif (logger === undefined) {\n\t\treturn;\n\t}\n\tconst results = logger.reportAndClearTrackedEvents();\n\tif (results.unexpectedErrors.length > 0) {\n\t\treturn new Error(\n\t\t\t`${prefix ?? \"\"}Unexpected Errors in Logs:\\n${JSON.stringify(\n\t\t\t\tresults.unexpectedErrors.map(primaryEventProps),\n\t\t\t\tundefined,\n\t\t\t\t2,\n\t\t\t)}`,\n\t\t);\n\t}\n\tif (results.expectedNotFound.length > 0) {\n\t\treturn new Error(\n\t\t\t`${prefix ?? \"\"}Expected Events not found:\\n${JSON.stringify(\n\t\t\t\tresults.expectedNotFound,\n\t\t\t\tundefined,\n\t\t\t\t2,\n\t\t\t)}`,\n\t\t);\n\t}\n}\n"]}
|
package/lib/index.d.ts
CHANGED
|
@@ -2,16 +2,20 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
+
export type { IEventAndErrorTrackingLogger } from "./eventAndErrorLogger.js";
|
|
6
|
+
export { EventAndErrorTrackingLogger, getUnexpectedLogErrorException, } from "./eventAndErrorLogger.js";
|
|
5
7
|
export { IProvideTestFluidObject, ITestFluidObject } from "./interfaces.js";
|
|
6
|
-
export { LoaderContainerTracker } from "./loaderContainerTracker.js";
|
|
7
8
|
export { fluidEntryPoint, LocalCodeLoader, SupportedExportInterfaces, Factory, createDataStoreFactory, } from "./localCodeLoader.js";
|
|
8
9
|
export { createAndAttachContainer, createLoader, createLoaderProps, createAndAttachContainerUsingProps, } from "./localLoader.js";
|
|
9
10
|
export { retryWithEventualValue } from "./retry.js";
|
|
10
11
|
export { createTestConfigProvider, ITestConfigProvider } from "./TestConfigs.js";
|
|
11
12
|
export { createTestContainerRuntimeFactory, TestContainerRuntimeFactory, } from "./testContainerRuntimeFactory.js";
|
|
12
13
|
export { ChannelFactoryRegistry, TestFluidObject, TestFluidObjectFactory, TestDataObjectKind, } from "./testFluidObject.js";
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
14
|
+
export { LoaderContainerTracker } from "./loaderContainerTracker.js";
|
|
15
|
+
export type { IDocumentIdStrategy, IOpProcessingController, ITestContainerConfig, ITestObjectProvider, } from "./testObjectProvider.js";
|
|
16
|
+
export { createDocumentId, DataObjectFactoryType, TestObjectProvider, TestObjectProviderWithVersionedLoad, } from "./testObjectProvider.js";
|
|
17
|
+
export type { SummaryInfo } from "./TestSummaryUtils.js";
|
|
18
|
+
export { createSummarizer, createSummarizerCore, createSummarizerFromFactory, summarizeNow, } from "./TestSummaryUtils.js";
|
|
15
19
|
export { timeoutAwait, timeoutPromise, type TimeoutDurationOption, type TimeoutWithError, type TimeoutWithValue, } from "./timeoutUtils.js";
|
|
16
20
|
export { toIDeltaManagerFull, waitForContainerConnection, getContainerEntryPointBackCompat, getDataStoreEntryPointBackCompat, } from "./containerUtils.js";
|
|
17
21
|
export { type ContainerRuntimeFactoryWithDefaultDataStoreConstructor, type ContainerRuntimeFactoryWithDefaultDataStoreProps, createContainerRuntimeFactoryWithDefaultDataStore, } from "./testContainerRuntimeFactoryWithDefaultDataStore.js";
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EACN,2BAA2B,EAC3B,8BAA8B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EACN,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,OAAO,EACP,sBAAsB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,kCAAkC,GAClC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EACN,iCAAiC,EACjC,2BAA2B,GAC3B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACN,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACtB,kBAAkB,GAClB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EACX,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,mCAAmC,GACnC,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAC3B,YAAY,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,YAAY,EACZ,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,gCAAgC,EAChC,gCAAgC,GAChC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACN,KAAK,sDAAsD,EAC3D,KAAK,gDAAgD,EACrD,iDAAiD,GACjD,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -2,17 +2,26 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
export {
|
|
5
|
+
export { EventAndErrorTrackingLogger, getUnexpectedLogErrorException, } from "./eventAndErrorLogger.js";
|
|
6
6
|
export { LocalCodeLoader, createDataStoreFactory, } from "./localCodeLoader.js";
|
|
7
7
|
export { createAndAttachContainer, createLoader, createLoaderProps, createAndAttachContainerUsingProps, } from "./localLoader.js";
|
|
8
8
|
export { retryWithEventualValue } from "./retry.js";
|
|
9
9
|
export { createTestConfigProvider } from "./TestConfigs.js";
|
|
10
10
|
export { createTestContainerRuntimeFactory, TestContainerRuntimeFactory, } from "./testContainerRuntimeFactory.js";
|
|
11
11
|
export { TestFluidObject, TestFluidObjectFactory, } from "./testFluidObject.js";
|
|
12
|
-
|
|
12
|
+
// #region Exports with load side-effect
|
|
13
|
+
// The below runtime (not "type") exports transitively or directly import
|
|
14
|
+
// timeoutUtils.ts, which always executes on import and may patch Mocha's timeout
|
|
15
|
+
// handling. That patching only takes effect when consumers use
|
|
16
|
+
// @fluid-internal/mocha-test-setup that sets globalThis.getMochaModule.
|
|
17
|
+
// @fluid-internal/mocha-test-setup is pervasive in our tests and thus patch
|
|
18
|
+
// is usually in effect (when this package is used).
|
|
19
|
+
export { LoaderContainerTracker } from "./loaderContainerTracker.js";
|
|
20
|
+
export { createDocumentId, DataObjectFactoryType, TestObjectProvider, TestObjectProviderWithVersionedLoad, } from "./testObjectProvider.js";
|
|
13
21
|
export { createSummarizer, createSummarizerCore, createSummarizerFromFactory, summarizeNow, } from "./TestSummaryUtils.js";
|
|
14
22
|
export { timeoutAwait, timeoutPromise, } from "./timeoutUtils.js";
|
|
15
23
|
export { toIDeltaManagerFull, waitForContainerConnection, getContainerEntryPointBackCompat, getDataStoreEntryPointBackCompat, } from "./containerUtils.js";
|
|
24
|
+
// #endregion
|
|
16
25
|
export { createContainerRuntimeFactoryWithDefaultDataStore, } from "./testContainerRuntimeFactoryWithDefaultDataStore.js";
|
|
17
26
|
export { TestFluidObjectInternal } from "./testFluidObjectInternal.js";
|
|
18
27
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,2BAA2B,EAC3B,8BAA8B,GAC9B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAEN,eAAe,EAGf,sBAAsB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,kCAAkC,GAClC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAuB,MAAM,kBAAkB,CAAC;AACjF,OAAO,EACN,iCAAiC,EACjC,2BAA2B,GAC3B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEN,eAAe,EACf,sBAAsB,GAEtB,MAAM,sBAAsB,CAAC;AAE9B,wCAAwC;AACxC,yEAAyE;AACzE,iFAAiF;AACjF,+DAA+D;AAC/D,wEAAwE;AACxE,4EAA4E;AAC5E,oDAAoD;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAOrE,OAAO,EACN,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,mCAAmC,GACnC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAC3B,YAAY,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,YAAY,EACZ,cAAc,GAId,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,gCAAgC,EAChC,gCAAgC,GAChC,MAAM,qBAAqB,CAAC;AAC7B,aAAa;AAEb,OAAO,EAGN,iDAAiD,GACjD,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport type { IEventAndErrorTrackingLogger } from \"./eventAndErrorLogger.js\";\nexport {\n\tEventAndErrorTrackingLogger,\n\tgetUnexpectedLogErrorException,\n} from \"./eventAndErrorLogger.js\";\nexport { IProvideTestFluidObject, ITestFluidObject } from \"./interfaces.js\";\nexport {\n\tfluidEntryPoint,\n\tLocalCodeLoader,\n\tSupportedExportInterfaces,\n\tFactory,\n\tcreateDataStoreFactory,\n} from \"./localCodeLoader.js\";\nexport {\n\tcreateAndAttachContainer,\n\tcreateLoader,\n\tcreateLoaderProps,\n\tcreateAndAttachContainerUsingProps,\n} from \"./localLoader.js\";\nexport { retryWithEventualValue } from \"./retry.js\";\nexport { createTestConfigProvider, ITestConfigProvider } from \"./TestConfigs.js\";\nexport {\n\tcreateTestContainerRuntimeFactory,\n\tTestContainerRuntimeFactory,\n} from \"./testContainerRuntimeFactory.js\";\nexport {\n\tChannelFactoryRegistry,\n\tTestFluidObject,\n\tTestFluidObjectFactory,\n\tTestDataObjectKind,\n} from \"./testFluidObject.js\";\n\n// #region Exports with load side-effect\n// The below runtime (not \"type\") exports transitively or directly import\n// timeoutUtils.ts, which always executes on import and may patch Mocha's timeout\n// handling. That patching only takes effect when consumers use\n// @fluid-internal/mocha-test-setup that sets globalThis.getMochaModule.\n// @fluid-internal/mocha-test-setup is pervasive in our tests and thus patch\n// is usually in effect (when this package is used).\nexport { LoaderContainerTracker } from \"./loaderContainerTracker.js\";\nexport type {\n\tIDocumentIdStrategy,\n\tIOpProcessingController,\n\tITestContainerConfig,\n\tITestObjectProvider,\n} from \"./testObjectProvider.js\";\nexport {\n\tcreateDocumentId,\n\tDataObjectFactoryType,\n\tTestObjectProvider,\n\tTestObjectProviderWithVersionedLoad,\n} from \"./testObjectProvider.js\";\nexport type { SummaryInfo } from \"./TestSummaryUtils.js\";\nexport {\n\tcreateSummarizer,\n\tcreateSummarizerCore,\n\tcreateSummarizerFromFactory,\n\tsummarizeNow,\n} from \"./TestSummaryUtils.js\";\nexport {\n\ttimeoutAwait,\n\ttimeoutPromise,\n\ttype TimeoutDurationOption,\n\ttype TimeoutWithError,\n\ttype TimeoutWithValue,\n} from \"./timeoutUtils.js\";\nexport {\n\ttoIDeltaManagerFull,\n\twaitForContainerConnection,\n\tgetContainerEntryPointBackCompat,\n\tgetDataStoreEntryPointBackCompat,\n} from \"./containerUtils.js\";\n// #endregion\n\nexport {\n\ttype ContainerRuntimeFactoryWithDefaultDataStoreConstructor,\n\ttype ContainerRuntimeFactoryWithDefaultDataStoreProps,\n\tcreateContainerRuntimeFactoryWithDefaultDataStore,\n} from \"./testContainerRuntimeFactoryWithDefaultDataStore.js\";\n\nexport { TestFluidObjectInternal } from \"./testFluidObjectInternal.js\";\n"]}
|
package/lib/legacy.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
/*
|
|
7
7
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
8
|
-
* Generated by "flub generate entrypoints" in @fluid-tools/build-cli.
|
|
8
|
+
* Generated by "flub generate entrypoints --outFileLegacyBeta legacy --outDir ./lib --node10TypeCompat" in @fluid-tools/build-cli.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
export {
|
package/lib/packageVersion.d.ts
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
|
|
6
6
|
*/
|
|
7
7
|
export declare const pkgName = "@fluidframework/test-utils";
|
|
8
|
-
export declare const pkgVersion = "2.
|
|
8
|
+
export declare const pkgVersion = "2.92.0";
|
|
9
9
|
//# sourceMappingURL=packageVersion.d.ts.map
|
package/lib/packageVersion.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,4BAA4B,CAAC;AACpD,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/test-utils\";\nexport const pkgVersion = \"2.
|
|
1
|
+
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,4BAA4B,CAAC;AACpD,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/test-utils\";\nexport const pkgVersion = \"2.92.0\";\n"]}
|
package/lib/public.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
/*
|
|
7
7
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
8
|
-
* Generated by "flub generate entrypoints" in @fluid-tools/build-cli.
|
|
8
|
+
* Generated by "flub generate entrypoints --outFileLegacyBeta legacy --outDir ./lib --node10TypeCompat" in @fluid-tools/build-cli.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
export {}
|
|
@@ -6,10 +6,12 @@ import { ITestDriver } from "@fluid-internal/test-driver-definitions";
|
|
|
6
6
|
import { IContainer, IFluidCodeDetails, IHostLoader } from "@fluidframework/container-definitions/internal";
|
|
7
7
|
import { ILoaderProps, Loader } from "@fluidframework/container-loader/internal";
|
|
8
8
|
import type { IContainerRuntimeOptionsInternal } from "@fluidframework/container-runtime/internal";
|
|
9
|
-
import { IRequestHeader,
|
|
9
|
+
import { IRequestHeader, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
10
10
|
import { IDocumentServiceFactory, IResolvedUrl, IUrlResolver } from "@fluidframework/driver-definitions/internal";
|
|
11
11
|
import type { MinimumVersionForCollab } from "@fluidframework/runtime-definitions/internal";
|
|
12
|
-
import { type
|
|
12
|
+
import { type ITelemetryLoggerPropertyBags } from "@fluidframework/telemetry-utils/internal";
|
|
13
|
+
import type { IEventAndErrorTrackingLogger } from "./eventAndErrorLogger.js";
|
|
14
|
+
import { EventAndErrorTrackingLogger } from "./eventAndErrorLogger.js";
|
|
13
15
|
import { fluidEntryPoint } from "./localCodeLoader.js";
|
|
14
16
|
import { ChannelFactoryRegistry } from "./testFluidObject.js";
|
|
15
17
|
/**
|
|
@@ -207,44 +209,6 @@ export interface IDocumentIdStrategy {
|
|
|
207
209
|
*/
|
|
208
210
|
reset(): void;
|
|
209
211
|
}
|
|
210
|
-
/** @internal */
|
|
211
|
-
export interface IEventAndErrorTrackingLogger {
|
|
212
|
-
registerExpectedEvent: (...orderedExpectedEvents: ITelemetryGenericEventExt[]) => void;
|
|
213
|
-
reportAndClearTrackedEvents: () => {
|
|
214
|
-
expectedNotFound: {
|
|
215
|
-
index: number;
|
|
216
|
-
event: ITelemetryGenericEventExt;
|
|
217
|
-
}[];
|
|
218
|
-
unexpectedErrors: ITelemetryBaseEvent[];
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* This class tracks events. It allows specifying expected events, which will be looked for in order.
|
|
223
|
-
* It also tracks all unexpected errors.
|
|
224
|
-
* At any point you call reportAndClearTrackedEvents which will provide all unexpected errors, and
|
|
225
|
-
* any expected events that have not occurred.
|
|
226
|
-
* @internal
|
|
227
|
-
*/
|
|
228
|
-
export declare class EventAndErrorTrackingLogger implements ITelemetryBaseLogger, IEventAndErrorTrackingLogger {
|
|
229
|
-
private readonly baseLogger?;
|
|
230
|
-
/**
|
|
231
|
-
* Even if these error events are logged, tests should still be allowed to pass
|
|
232
|
-
* Additionally, if downgrade is true, then log as generic (e.g. to avoid polluting the e2e test logs)
|
|
233
|
-
*/
|
|
234
|
-
private readonly allowedErrors;
|
|
235
|
-
constructor(baseLogger?: ITelemetryBaseLogger | undefined);
|
|
236
|
-
private readonly expectedEvents;
|
|
237
|
-
private readonly unexpectedErrors;
|
|
238
|
-
registerExpectedEvent(...orderedExpectedEvents: ITelemetryGenericEventExt[]): void;
|
|
239
|
-
send(event: ITelemetryBaseEvent): void;
|
|
240
|
-
reportAndClearTrackedEvents(): {
|
|
241
|
-
expectedNotFound: {
|
|
242
|
-
index: number;
|
|
243
|
-
event: ITelemetryGenericEventExt;
|
|
244
|
-
}[];
|
|
245
|
-
unexpectedErrors: ITelemetryBaseEvent[];
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
212
|
/**
|
|
249
213
|
* Shared base class for test object provider. Contain code for loader and container creation and loading
|
|
250
214
|
* @internal
|
|
@@ -478,10 +442,4 @@ export declare class TestObjectProviderWithVersionedLoad implements ITestObjectP
|
|
|
478
442
|
*/
|
|
479
443
|
resetLoaderContainerTracker(syncSummarizerClients?: boolean): void;
|
|
480
444
|
}
|
|
481
|
-
/**
|
|
482
|
-
* Retrieves unexpected errors from a logger and returns them as an exception.
|
|
483
|
-
*
|
|
484
|
-
* @internal
|
|
485
|
-
*/
|
|
486
|
-
export declare function getUnexpectedLogErrorException(logger: IEventAndErrorTrackingLogger | undefined, prefix?: string): Error | undefined;
|
|
487
445
|
//# sourceMappingURL=testObjectProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testObjectProvider.d.ts","sourceRoot":"","sources":["../src/testObjectProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAmB,MAAM,yCAAyC,CAAC;AACvF,OAAO,EACN,UAAU,EACV,iBAAiB,EACjB,WAAW,EAEX,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACN,YAAY,EACZ,MAAM,EAEN,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AACnG,OAAO,EACN,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"testObjectProvider.d.ts","sourceRoot":"","sources":["../src/testObjectProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAmB,MAAM,yCAAyC,CAAC;AACvF,OAAO,EACN,UAAU,EACV,iBAAiB,EACjB,WAAW,EAEX,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACN,YAAY,EACZ,MAAM,EAEN,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AACnG,OAAO,EACN,cAAc,EACd,oBAAoB,EAGpB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACN,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,MAAM,6CAA6C,CAAC;AAErD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAGN,KAAK,4BAA4B,EAGjC,MAAM,0CAA0C,CAAC;AAGlD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EACN,2BAA2B,EAE3B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAmB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAO9D;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACvC;;;OAGG;IACH,eAAe,CAAC,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D;;;;OAIG;IACH,eAAe,CAAC,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D;;;OAGG;IACH,eAAe,CAAC,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D;;;OAGG;IACH,gBAAgB,CAAC,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC;;OAEG;IACH,IAAI,EAAE,oBAAoB,GAAG,qCAAqC,CAAC;IAEnE;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,sBAAsB,EAAE,uBAAuB,CAAC;IAEhD;;OAEG;IACH,MAAM,EAAE,WAAW,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,oBAAoB,CAAC;IAE7B;;OAEG;IACH,OAAO,EAAE,4BAA4B,CAAC;IAEtC;;OAEG;IACH,WAAW,EAAE,YAAY,CAAC;IAE1B;;OAEG;IACH,kBAAkB,EAAE,iBAAiB,CAAC;IAEtC;;OAEG;IACH,sBAAsB,EAAE,uBAAuB,CAAC;IAEhD;;OAEG;IACH,qBAAqB,EAAE,CAAC,mBAAmB,CAAC,EAAE,oBAAoB,KAAK,eAAe,CAAC;IAEvF;;;;;;;;;OASG;IACH,YAAY,CACX,cAAc,EAAE,QAAQ,CAAC,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,EAC9D,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EACnC,qBAAqB,CAAC,EAAE,OAAO,GAC7B,WAAW,CAAC;IAEf;;;;;;;;OAQG;IAEH,eAAe,CACd,UAAU,EAAE,eAAe,EAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACjC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;OAEG;IACH,uBAAuB,CACtB,UAAU,EAAE,eAAe,EAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACjC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D;;OAEG;IACH,aAAa,CACZ,UAAU,EAAE,eAAe,EAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EACnC,aAAa,CAAC,EAAE,cAAc,EAC9B,iBAAiB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;;;OAIG;IACH,cAAc,CAAC,mBAAmB,CAAC,EAAE,oBAAoB,GAAG,WAAW,CAAC;IAExE;;;;OAIG;IACH,iBAAiB,CAAC,mBAAmB,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEnF;;;;;OAKG;IACH,iBAAiB,CAChB,mBAAmB,CAAC,EAAE,oBAAoB,EAC1C,aAAa,CAAC,EAAE,cAAc,EAC9B,iBAAiB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;OAEG;IACH,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC;IAEtD;;OAEG;IACH,kBAAkB,CAAC,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/D;;OAEG;IACH,2BAA2B,CAAC,qBAAqB,CAAC,EAAE,OAAO,OAAE;IAE7D;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;CACd;AAED;;GAEG;AACH,oBAAY,qBAAqB;IAChC,MAAM,IAAA,CAAE,UAAU;IAClB,IAAI,IAAA;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,qDAAqD;IACrD,mBAAmB,CAAC,EAAE,qBAAqB,CAAC;IAE5C,yFAAyF;IACzF,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAElC,2DAA2D;IAC3D,cAAc,CAAC,EAAE,gCAAgC,CAAC;IAElD,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,+HAA+H;IAC/H,qBAAqB,CAAC,EAAE,IAAI,CAAC;IAE7B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAEpC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;CAC1D;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAO,MAAgB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IACnC;;OAEG;IACH,GAAG,IAAI,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACzC;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;CACd;AA+BD;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,mBAAmB;IAoB5D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC;;OAEG;aACa,MAAM,EAAE,WAAW;IACnC;;OAEG;aACa,qBAAqB,EAAE,CACtC,mBAAmB,CAAC,EAAE,oBAAoB,KACtC,eAAe;IA7BrB;;OAEG;IACH,SAAgB,IAAI,wBAAwB;IAC5C,OAAO,CAAC,uBAAuB,CAAgC;IAC/D,OAAO,CAAC,uBAAuB,CAAsC;IACrE,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAE1D,OAAO,CAAC,gBAAgB,CAAS;IAEjC;;;;OAIG;gBAEe,iBAAiB,EAAE,OAAO,MAAM;IACjD;;OAEG;IACa,MAAM,EAAE,WAAW;IACnC;;OAEG;IACa,qBAAqB,EAAE,CACtC,mBAAmB,CAAC,EAAE,oBAAoB,KACtC,eAAe;IAKrB;;OAEG;IACH,IAAW,MAAM,IAAI,oBAAoB,CAiBxC;IAED,IAAW,OAAO,IAAI,2BAA2B,CAIhD;IAED;;OAEG;IACH,IAAW,sBAAsB,IAAI,uBAAuB,CAM3D;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,YAAY,CAMrC;IAED;;OAEG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED;;OAEG;IACH,IAAW,kBAAkB,IAAI,iBAAiB,CAEjD;IAED;;OAEG;IACH,IAAW,sBAAsB,IAAI,uBAAuB,CAE3D;IAED;;OAEG;IACI,YAAY,CAClB,cAAc,EAAE,QAAQ,CAAC,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,EAC9D,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACjC,MAAM;IAiBT;;OAEG;IACU,eAAe,CAC3B,UAAU,EAAE,eAAe,EAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACjC,OAAO,CAAC,UAAU,CAAC;IAmBtB;;OAEG;IACU,uBAAuB,CACnC,UAAU,EAAE,eAAe,EAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,GAC7C,OAAO,CAAC,UAAU,CAAC;IAUtB;;OAEG;IACU,uBAAuB,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1E;;OAEG;IACU,aAAa,CACzB,UAAU,EAAE,eAAe,EAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EACnC,aAAa,CAAC,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,UAAU,CAAC;YAKR,gBAAgB;IAc9B;;OAEG;IACI,cAAc,CAAC,mBAAmB,CAAC,EAAE,oBAAoB,GAAG,MAAM;IAOzE;;OAEG;IACU,iBAAiB,CAC7B,mBAAmB,CAAC,EAAE,oBAAoB,GACxC,OAAO,CAAC,UAAU,CAAC;IAmBtB;;OAEG;IACU,iBAAiB,CAC7B,mBAAmB,CAAC,EAAE,oBAAoB,EAC1C,aAAa,CAAC,EAAE,cAAc,EAC9B,iBAAiB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC;IAStB;;OAEG;IACI,KAAK,IAAI,IAAI;IAcpB;;OAEG;IACU,kBAAkB,CAAC,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAI7D,sBAAsB;IAYpC;;OAEG;IACI,gBAAgB,CAAC,WAAW,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;IASpE;;OAEG;IACI,2BAA2B,CAAC,qBAAqB,GAAE,OAAe,GAAG,IAAI;CAIhF;AAED;;;;GAIG;AACH,qBAAa,mCAAoC,YAAW,mBAAmB;IAuB7E,OAAO,CAAC,QAAQ,CAAC,4BAA4B;IAC7C,OAAO,CAAC,QAAQ,CAAC,2BAA2B;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,gCAAgC;IAGjD,OAAO,CAAC,QAAQ,CAAC,+BAA+B;IAGhD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAhCjC;;OAEG;IACH,SAAgB,IAAI,yCAAyC;IAC7D,OAAO,CAAC,uBAAuB,CAAgC;IAC/D,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,uBAAuB,CAAsC;IACrE,OAAO,CAAC,YAAY,CAA2B;IAE/C,OAAO,CAAC,gBAAgB,CAAS;IAEjC;;;;;OAKG;IACH,OAAO,CAAC,YAAY,CAAiB;gBAGnB,4BAA4B,EAAE,OAAO,MAAM,EAC3C,2BAA2B,EAAE,OAAO,MAAM,EAC1C,iBAAiB,EAAE,WAAW,EAC9B,gBAAgB,EAAE,WAAW,EAC7B,gCAAgC,EAAE,CAClD,mBAAmB,CAAC,EAAE,oBAAoB,KACtC,eAAe,EACH,+BAA+B,EAAE,CACjD,mBAAmB,CAAC,EAAE,oBAAoB,KACtC,eAAe,EACH,cAAc,CAAC,0CAA8B;IAK/D;;OAEG;IACH,IAAW,MAAM,IAAI,oBAAoB,CASxC;IAED,IAAW,OAAO,IAAI,2BAA2B,CAIhD;IAED;;OAEG;IACH,IAAW,sBAAsB,IAAI,uBAAuB,CAM3D;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,YAAY,CAMrC;IAED;;OAEG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED;;OAEG;IACH,IAAW,kBAAkB,IAAI,iBAAiB,CAEjD;IAED;;OAEG;IACH,IAAW,sBAAsB,IAAI,uBAAuB,CAE3D;IAED;;OAEG;IACH,IAAW,MAAM,IAAI,WAAW,CAE/B;IAED;;OAEG;IACH,IAAW,qBAAqB,IAAI,CACnC,mBAAmB,CAAC,EAAE,oBAAoB,KACtC,eAAe,CAInB;IAED,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACI,YAAY,CAClB,cAAc,EAAE,QAAQ,CAAC,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,EAC9D,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EACnC,qBAAqB,UAAQ,GAC3B,MAAM;IAYT;;OAEG;IACU,eAAe,CAC3B,UAAU,EAAE,eAAe,EAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACjC,OAAO,CAAC,UAAU,CAAC;IAmBtB;;OAEG;IACU,uBAAuB,CACnC,UAAU,EAAE,eAAe,EAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,GAC7C,OAAO,CAAC,UAAU,CAAC;IAUtB;;OAEG;IACU,uBAAuB,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1E;;OAEG;IACU,aAAa,CACzB,UAAU,EAAE,eAAe,EAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EACnC,aAAa,CAAC,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,UAAU,CAAC;YAMR,gBAAgB;IAgB9B;;OAEG;IACI,cAAc,CAAC,mBAAmB,CAAC,EAAE,oBAAoB,GAAG,MAAM;IAQzE;;OAEG;IACU,iBAAiB,CAC7B,mBAAmB,CAAC,EAAE,oBAAoB,GACxC,OAAO,CAAC,UAAU,CAAC;IAsBtB;;OAEG;IACU,iBAAiB,CAC7B,mBAAmB,CAAC,EAAE,oBAAoB,EAC1C,aAAa,CAAC,EAAE,cAAc,EAC9B,iBAAiB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC;IAetB;;OAEG;IACI,KAAK,IAAI,IAAI;IAepB;;OAEG;IACU,kBAAkB,CAAC,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAI7D,sBAAsB;IAYpC;;OAEG;IACI,gBAAgB,CAAC,WAAW,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;IASpE;;OAEG;IACI,2BAA2B,CAAC,qBAAqB,GAAE,OAAe,GAAG,IAAI;CAIhF"}
|
|
@@ -7,10 +7,10 @@ import { assert } from "@fluidframework/core-utils/internal";
|
|
|
7
7
|
import { isOdspResolvedUrl } from "@fluidframework/odsp-driver/internal";
|
|
8
8
|
import { createChildLogger, createMultiSinkLogger, TelemetryDataTag, tagData, } from "@fluidframework/telemetry-utils/internal";
|
|
9
9
|
import { v4 as uuid } from "uuid";
|
|
10
|
+
import { EventAndErrorTrackingLogger, getUnexpectedLogErrorException, } from "./eventAndErrorLogger.js";
|
|
10
11
|
import { LoaderContainerTracker } from "./loaderContainerTracker.js";
|
|
11
12
|
import { LocalCodeLoader } from "./localCodeLoader.js";
|
|
12
13
|
import { createAndAttachContainer } from "./localLoader.js";
|
|
13
|
-
import { isNonEmptyArray } from "./nonEmptyArrayType.js";
|
|
14
14
|
const defaultCodeDetails = {
|
|
15
15
|
package: "defaultTestPackage",
|
|
16
16
|
config: {},
|
|
@@ -57,86 +57,6 @@ function getDocumentIdStrategy(type) {
|
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
/**
|
|
61
|
-
* This class tracks events. It allows specifying expected events, which will be looked for in order.
|
|
62
|
-
* It also tracks all unexpected errors.
|
|
63
|
-
* At any point you call reportAndClearTrackedEvents which will provide all unexpected errors, and
|
|
64
|
-
* any expected events that have not occurred.
|
|
65
|
-
* @internal
|
|
66
|
-
*/
|
|
67
|
-
export class EventAndErrorTrackingLogger {
|
|
68
|
-
constructor(baseLogger) {
|
|
69
|
-
this.baseLogger = baseLogger;
|
|
70
|
-
/**
|
|
71
|
-
* Even if these error events are logged, tests should still be allowed to pass
|
|
72
|
-
* Additionally, if downgrade is true, then log as generic (e.g. to avoid polluting the e2e test logs)
|
|
73
|
-
*/
|
|
74
|
-
this.allowedErrors = [
|
|
75
|
-
// This log was removed in current version as unnecessary, but it's still present in previous versions
|
|
76
|
-
{
|
|
77
|
-
eventName: "fluid:telemetry:Container:NoRealStorageInDetachedContainer",
|
|
78
|
-
downgrade: true,
|
|
79
|
-
},
|
|
80
|
-
// 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.
|
|
81
|
-
{ eventName: "fluid:telemetry:OpRoundtripTime" },
|
|
82
|
-
];
|
|
83
|
-
this.expectedEvents = [];
|
|
84
|
-
this.unexpectedErrors = [];
|
|
85
|
-
}
|
|
86
|
-
registerExpectedEvent(...orderedExpectedEvents) {
|
|
87
|
-
if (this.expectedEvents.length !== 0) {
|
|
88
|
-
// we don't have to error here. just no reason not to. given the events must be
|
|
89
|
-
// ordered it could be tricky to figure out problems around multiple registrations.
|
|
90
|
-
throw new Error("Expected events already registered.\n" +
|
|
91
|
-
"Call reportAndClearTrackedEvents to clear them before registering more");
|
|
92
|
-
}
|
|
93
|
-
this.expectedEvents.push(...orderedExpectedEvents.map((event, index) => ({ index, event })));
|
|
94
|
-
}
|
|
95
|
-
send(event) {
|
|
96
|
-
if (isNonEmptyArray(this.expectedEvents)) {
|
|
97
|
-
const ee = this.expectedEvents[0].event;
|
|
98
|
-
if (ee.eventName === event.eventName) {
|
|
99
|
-
let matches = true;
|
|
100
|
-
for (const key of Object.keys(ee)) {
|
|
101
|
-
if (ee[key] !== event[key]) {
|
|
102
|
-
matches = false;
|
|
103
|
-
break;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
if (matches) {
|
|
107
|
-
// we found an expected event
|
|
108
|
-
// so remove it from the list of expected events
|
|
109
|
-
// and if it is an error, change it to generic
|
|
110
|
-
// this helps keep our telemetry clear of
|
|
111
|
-
// expected errors.
|
|
112
|
-
this.expectedEvents.shift();
|
|
113
|
-
if (event.category === "error") {
|
|
114
|
-
event.category = "generic";
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (event.category === "error") {
|
|
120
|
-
// Check to see if this error is allowed and if its category should be downgraded
|
|
121
|
-
const allowedError = this.allowedErrors.find(({ eventName }) => eventName === event.eventName);
|
|
122
|
-
if (allowedError === undefined) {
|
|
123
|
-
this.unexpectedErrors.push(event);
|
|
124
|
-
}
|
|
125
|
-
else if (allowedError.downgrade) {
|
|
126
|
-
event.category = "generic";
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
this.baseLogger?.send(event);
|
|
130
|
-
}
|
|
131
|
-
reportAndClearTrackedEvents() {
|
|
132
|
-
const expectedNotFound = this.expectedEvents.splice(0, this.expectedEvents.length);
|
|
133
|
-
const unexpectedErrors = this.unexpectedErrors.splice(0, this.unexpectedErrors.length);
|
|
134
|
-
return {
|
|
135
|
-
expectedNotFound,
|
|
136
|
-
unexpectedErrors,
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
60
|
/**
|
|
141
61
|
* Shared base class for test object provider. Contain code for loader and container creation and loading
|
|
142
62
|
* @internal
|
|
@@ -678,29 +598,4 @@ function getUrlTelemetryProps(resolvedUrl) {
|
|
|
678
598
|
}
|
|
679
599
|
return tagData(TelemetryDataTag.UserData, props);
|
|
680
600
|
}
|
|
681
|
-
/** Summarize the event with just the primary properties, for succinct output in case of test failure */
|
|
682
|
-
const primaryEventProps = ({ category, eventName, error, errorType, }) => ({
|
|
683
|
-
category,
|
|
684
|
-
eventName,
|
|
685
|
-
error,
|
|
686
|
-
errorType,
|
|
687
|
-
["..."]: "*** Additional properties not shown, see full log for details ***",
|
|
688
|
-
});
|
|
689
|
-
/**
|
|
690
|
-
* Retrieves unexpected errors from a logger and returns them as an exception.
|
|
691
|
-
*
|
|
692
|
-
* @internal
|
|
693
|
-
*/
|
|
694
|
-
export function getUnexpectedLogErrorException(logger, prefix) {
|
|
695
|
-
if (logger === undefined) {
|
|
696
|
-
return;
|
|
697
|
-
}
|
|
698
|
-
const results = logger.reportAndClearTrackedEvents();
|
|
699
|
-
if (results.unexpectedErrors.length > 0) {
|
|
700
|
-
return new Error(`${prefix ?? ""}Unexpected Errors in Logs:\n${JSON.stringify(results.unexpectedErrors.map(primaryEventProps), undefined, 2)}`);
|
|
701
|
-
}
|
|
702
|
-
if (results.expectedNotFound.length > 0) {
|
|
703
|
-
return new Error(`${prefix ?? ""}Expected Events not found:\n${JSON.stringify(results.expectedNotFound, undefined, 2)}`);
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
601
|
//# sourceMappingURL=testObjectProvider.js.map
|