@overkill-dev/engine 0.0.14 → 0.0.16
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/diff/diff-shape.d.ts +7 -2
- package/diff/diff-shape.d.ts.map +1 -1
- package/engine/assertion-recorder.js +242 -0
- package/engine/assertion-recorder.js.map +1 -0
- package/engine/case-execution.js +31 -247
- package/engine/case-execution.js.map +1 -1
- package/engine/execution-result.js +12 -4
- package/engine/execution-result.js.map +1 -1
- package/engine/execution-supervision.d.ts +50 -0
- package/engine/execution-supervision.d.ts.map +1 -0
- package/engine/execution-supervision.js +316 -0
- package/engine/execution-supervision.js.map +1 -0
- package/engine/execution.d.ts +4 -1
- package/engine/execution.d.ts.map +1 -1
- package/engine/execution.js +70 -61
- package/engine/execution.js.map +1 -1
- package/engine/reporter-output.d.ts +8 -1
- package/engine/reporter-output.d.ts.map +1 -1
- package/engine/reporter-output.js +9 -2
- package/engine/reporter-output.js.map +1 -1
- package/engine/reporter.d.ts +9 -3
- package/engine/reporter.d.ts.map +1 -1
- package/engine/reporter.js +7 -0
- package/engine/reporter.js.map +1 -1
- package/engine/run-result.d.ts +15 -5
- package/engine/run-result.d.ts.map +1 -1
- package/engine/run-result.js.map +1 -1
- package/engine/test-node.d.ts +1 -0
- package/engine/test-node.d.ts.map +1 -1
- package/engine/test-node.js.map +1 -1
- package/package.json +3 -1
- package/packages/engine/engine.entry-point.d.ts +4 -4
- package/packages/engine/engine.entry-point.d.ts.map +1 -1
- package/packages/engine/engine.entry-point.js +2 -2
- package/packages/engine/engine.entry-point.js.map +1 -1
- package/sbom.cdx.json +5 -5
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
import { caseIdentityKey } from "./identity.js";
|
|
2
2
|
function hasFailed(testResult) {
|
|
3
|
-
return testResult.
|
|
3
|
+
return testResult.verdict === 'fail';
|
|
4
4
|
}
|
|
5
5
|
function isInconclusive(testResult) {
|
|
6
|
-
return testResult.
|
|
6
|
+
return testResult.verdict === 'inconclusive';
|
|
7
7
|
}
|
|
8
8
|
function hasPassed(testResult) {
|
|
9
|
-
return testResult.
|
|
9
|
+
return testResult.verdict === 'pass';
|
|
10
10
|
}
|
|
11
11
|
function wasSkipped(testResult) {
|
|
12
|
-
return testResult.
|
|
12
|
+
return testResult.verdict === 'skip';
|
|
13
|
+
}
|
|
14
|
+
function resourceExhausted(testResult) {
|
|
15
|
+
return testResult.verdict === 'resource-exhausted';
|
|
16
|
+
}
|
|
17
|
+
function crashed(testResult) {
|
|
18
|
+
return testResult.verdict === 'crashed';
|
|
13
19
|
}
|
|
14
20
|
function countOutcomes(testPlan, perTest) {
|
|
15
21
|
return {
|
|
22
|
+
crashed: perTest.filter(crashed).length,
|
|
16
23
|
defined: testPlan.defined,
|
|
17
24
|
discovered: testPlan.discoveredCases.length,
|
|
18
25
|
failed: perTest.filter(hasFailed).length,
|
|
19
26
|
inconclusive: perTest.filter(isInconclusive).length,
|
|
20
27
|
passed: perTest.filter(hasPassed).length,
|
|
21
28
|
planned: testPlan.cases.length,
|
|
29
|
+
resourceExhausted: perTest.filter(resourceExhausted).length,
|
|
22
30
|
skipped: perTest.filter(wasSkipped).length
|
|
23
31
|
};
|
|
24
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-result.js","sourceRoot":"","sources":["../../../../source/engine/execution-result.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAehD,SAAS,SAAS,CAAC,UAAyB;IACxC,OAAO,UAAU,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"execution-result.js","sourceRoot":"","sources":["../../../../source/engine/execution-result.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { WallClock } from '@enormora/wall-clock';
|
|
2
|
+
import { type PerTestResult, type ResourceUsageSnapshot, type RunnerError } from './run-result.ts';
|
|
3
|
+
import type { TestPlanCase } from './test-plan.ts';
|
|
4
|
+
export type ExecuteTimeoutPolicy = {
|
|
5
|
+
readonly hardTimeoutMilliseconds: number;
|
|
6
|
+
readonly timeoutMilliseconds: number;
|
|
7
|
+
};
|
|
8
|
+
export type ExecuteResourceBudgets = {
|
|
9
|
+
readonly activeResourceCount: number | null;
|
|
10
|
+
readonly javaScriptEngineHeapBytes: number | null;
|
|
11
|
+
readonly residentSetBytes: number | null;
|
|
12
|
+
readonly residentSetGrowthBytesPerSecond: number | null;
|
|
13
|
+
};
|
|
14
|
+
export type ConcurrentCase = {
|
|
15
|
+
readonly result: PerTestResult;
|
|
16
|
+
readonly wallTimeMs: number;
|
|
17
|
+
};
|
|
18
|
+
export type ExecutionSupervisionDependencies = {
|
|
19
|
+
readonly wallClock: WallClock;
|
|
20
|
+
};
|
|
21
|
+
type CaseCompletion = {
|
|
22
|
+
readonly complete: (executedCase: ConcurrentCase) => void;
|
|
23
|
+
readonly promise: Promise<ConcurrentCase>;
|
|
24
|
+
};
|
|
25
|
+
type ActiveCase = {
|
|
26
|
+
readonly abort: () => void;
|
|
27
|
+
readonly completion: CaseCompletion;
|
|
28
|
+
readonly hardTimeout: ReturnType<WallClock['setTimeout']> | null;
|
|
29
|
+
readonly startedAtMilliseconds: number;
|
|
30
|
+
readonly testCase: TestPlanCase;
|
|
31
|
+
};
|
|
32
|
+
export type ExecutionSupervision = {
|
|
33
|
+
readonly activeCases: ReadonlyMap<string, ActiveCase>;
|
|
34
|
+
readonly addActiveCase: (key: string, activeCase: ActiveCase) => void;
|
|
35
|
+
readonly recordRunnerError: (error: RunnerError) => void;
|
|
36
|
+
readonly removeActiveCase: (key: string) => void;
|
|
37
|
+
readonly runnerErrors: readonly RunnerError[];
|
|
38
|
+
};
|
|
39
|
+
type ResourceUsageSampleInput = {
|
|
40
|
+
readonly budgets: ExecuteResourceBudgets | null | undefined;
|
|
41
|
+
readonly dependencies: ExecutionSupervisionDependencies;
|
|
42
|
+
readonly previousSample: ResourceUsageSnapshot | null;
|
|
43
|
+
readonly sample: ResourceUsageSnapshot;
|
|
44
|
+
readonly supervision: ExecutionSupervision;
|
|
45
|
+
};
|
|
46
|
+
export declare function createExecutionSupervision(): ExecutionSupervision;
|
|
47
|
+
export declare function recordResourceUsageSample(input: ResourceUsageSampleInput): boolean;
|
|
48
|
+
export declare function executeCaseBody(testCase: TestPlanCase, timeoutPolicy: ExecuteTimeoutPolicy | null | undefined, supervision: ExecutionSupervision, dependencies: ExecutionSupervisionDependencies): Promise<ConcurrentCase>;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=execution-supervision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-supervision.d.ts","sourceRoot":"","sources":["../../../../source/engine/execution-supervision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAEH,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,oBAAoB,GAAG;IAC/B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,+BAA+B,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CACjC,CAAC;AAEF,KAAK,cAAc,GAAG;IAClB,QAAQ,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CAC7C,CAAC;AAEF,KAAK,UAAU,GAAG;IACd,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC;IACjE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACnC,CAAC;AAqBF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtD,QAAQ,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACtE,QAAQ,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACzD,QAAQ,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;CACjD,CAAC;AAwBF,KAAK,wBAAwB,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5D,QAAQ,CAAC,YAAY,EAAE,gCAAgC,CAAC;IACxD,QAAQ,CAAC,cAAc,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;CAC9C,CAAC;AAUF,wBAAgB,0BAA0B,IAAI,oBAAoB,CAiBjE;AA0YD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAUlF;AAED,wBAAsB,eAAe,CACjC,QAAQ,EAAE,YAAY,EACtB,aAAa,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,EACtD,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,gCAAgC,GAC/C,OAAO,CAAC,cAAc,CAAC,CAWzB"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { invalidTimeoutMetadataFailure, runTestCase, timeoutFailure } from "./case-execution.js";
|
|
2
|
+
import { caseIdentityKey } from "./identity.js";
|
|
3
|
+
import { verdictFromOutcome } from "./run-result.js";
|
|
4
|
+
const millisecondsPerSecond = 1000;
|
|
5
|
+
const resourceBudgetMetrics = [
|
|
6
|
+
'activeResourceCount',
|
|
7
|
+
'javaScriptEngineHeapBytes',
|
|
8
|
+
'residentSetBytes',
|
|
9
|
+
'residentSetGrowthBytesPerSecond'
|
|
10
|
+
];
|
|
11
|
+
export function createExecutionSupervision() {
|
|
12
|
+
const activeCases = new Map();
|
|
13
|
+
const runnerErrors = [];
|
|
14
|
+
return {
|
|
15
|
+
activeCases,
|
|
16
|
+
addActiveCase(key, activeCase) {
|
|
17
|
+
activeCases.set(key, activeCase);
|
|
18
|
+
},
|
|
19
|
+
recordRunnerError(error) {
|
|
20
|
+
runnerErrors.push(error);
|
|
21
|
+
},
|
|
22
|
+
removeActiveCase(key) {
|
|
23
|
+
activeCases.delete(key);
|
|
24
|
+
},
|
|
25
|
+
runnerErrors
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function createCaseCompletion() {
|
|
29
|
+
const { promise, resolve } = Promise.withResolvers();
|
|
30
|
+
return {
|
|
31
|
+
complete: resolve,
|
|
32
|
+
promise
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function createTerminalCase(testCase, verdict, wallTimeMs) {
|
|
36
|
+
return {
|
|
37
|
+
result: {
|
|
38
|
+
id: testCase.id,
|
|
39
|
+
outcome: null,
|
|
40
|
+
verdict
|
|
41
|
+
},
|
|
42
|
+
wallTimeMs
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function failCase(id, failures) {
|
|
46
|
+
const outcome = {
|
|
47
|
+
failures,
|
|
48
|
+
kind: 'fail'
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
id,
|
|
52
|
+
outcome,
|
|
53
|
+
verdict: verdictFromOutcome(outcome)
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function timeoutMetadataValue(testCase) {
|
|
57
|
+
return testCase.metadata.timeoutMilliseconds;
|
|
58
|
+
}
|
|
59
|
+
function isPositiveSafeInteger(value) {
|
|
60
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value > 0;
|
|
61
|
+
}
|
|
62
|
+
function resolveSoftTimeout(testCase, policy) {
|
|
63
|
+
if (policy === null || policy === undefined) {
|
|
64
|
+
return { kind: 'milliseconds', milliseconds: null };
|
|
65
|
+
}
|
|
66
|
+
const metadataTimeout = timeoutMetadataValue(testCase);
|
|
67
|
+
if (metadataTimeout === undefined) {
|
|
68
|
+
return { kind: 'milliseconds', milliseconds: policy.timeoutMilliseconds };
|
|
69
|
+
}
|
|
70
|
+
if (isPositiveSafeInteger(metadataTimeout) && metadataTimeout <= policy.hardTimeoutMilliseconds) {
|
|
71
|
+
return { kind: 'milliseconds', milliseconds: metadataTimeout };
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
failure: invalidTimeoutMetadataFailure(metadataTimeout, `positive safe integer <= ${policy.hardTimeoutMilliseconds}`),
|
|
75
|
+
kind: 'failure'
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function resultWithTimeoutFailure(executedCase, deadlineMilliseconds, elapsedMilliseconds) {
|
|
79
|
+
const failure = timeoutFailure(deadlineMilliseconds, elapsedMilliseconds);
|
|
80
|
+
const { outcome } = executedCase.result;
|
|
81
|
+
if (outcome?.kind === 'fail') {
|
|
82
|
+
return {
|
|
83
|
+
...executedCase,
|
|
84
|
+
result: {
|
|
85
|
+
...executedCase.result,
|
|
86
|
+
outcome: {
|
|
87
|
+
failures: [...outcome.failures, failure],
|
|
88
|
+
kind: 'fail'
|
|
89
|
+
},
|
|
90
|
+
verdict: 'fail'
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
...executedCase,
|
|
96
|
+
result: failCase(executedCase.result.id, [failure])
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function clearTimer(wallClock, timer) {
|
|
100
|
+
if (timer !== null) {
|
|
101
|
+
wallClock.clearTimeout(timer);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function activeCaseIds(activeCases) {
|
|
105
|
+
return Array.from(activeCases.values(), function toCaseId(activeCase) {
|
|
106
|
+
return activeCase.testCase.id;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function resourceExhaustionError(cause) {
|
|
110
|
+
const [activeCase = null] = cause.activeCases;
|
|
111
|
+
return {
|
|
112
|
+
attributedTo: cause.activeCases.length === 1 ? activeCase : null,
|
|
113
|
+
cause,
|
|
114
|
+
message: `Resource budget exceeded: ${cause.metric} observed ${cause.observed}, budget ${cause.budget}.`,
|
|
115
|
+
subtype: 'resource-exhaustion'
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function crashError(cause) {
|
|
119
|
+
const [activeCase = null] = cause.activeCases;
|
|
120
|
+
return {
|
|
121
|
+
attributedTo: cause.activeCases.length === 1 ? activeCase : null,
|
|
122
|
+
cause,
|
|
123
|
+
message: 'Test execution exceeded hard timeout.',
|
|
124
|
+
subtype: 'crash'
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function completeActiveCasesAs(supervision, verdict, dependencies) {
|
|
128
|
+
for (const [key, activeCase] of supervision.activeCases) {
|
|
129
|
+
supervision.removeActiveCase(key);
|
|
130
|
+
activeCase.abort();
|
|
131
|
+
clearTimer(dependencies.wallClock, activeCase.hardTimeout);
|
|
132
|
+
activeCase.completion.complete(createTerminalCase(activeCase.testCase, verdict, dependencies.wallClock.currentTimestampInMilliseconds - activeCase.startedAtMilliseconds));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function completeActiveCasesWithCrash(supervision, dependencies) {
|
|
136
|
+
const cause = {
|
|
137
|
+
activeCases: activeCaseIds(supervision.activeCases),
|
|
138
|
+
reason: 'hard-timeout'
|
|
139
|
+
};
|
|
140
|
+
if (cause.activeCases.length > 0) {
|
|
141
|
+
supervision.recordRunnerError(crashError(cause));
|
|
142
|
+
completeActiveCasesAs(supervision, 'crashed', dependencies);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function completeActiveCasesWithResourceExhaustion(breach, supervision, dependencies) {
|
|
146
|
+
const cause = {
|
|
147
|
+
...breach,
|
|
148
|
+
activeCases: activeCaseIds(supervision.activeCases),
|
|
149
|
+
enforcement: 'sampled'
|
|
150
|
+
};
|
|
151
|
+
if (cause.activeCases.length === 0) {
|
|
152
|
+
supervision.recordRunnerError(resourceExhaustionError({
|
|
153
|
+
...cause,
|
|
154
|
+
enforcement: 'post-test-diagnostic'
|
|
155
|
+
}));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
supervision.recordRunnerError(resourceExhaustionError(cause));
|
|
159
|
+
completeActiveCasesAs(supervision, 'resource-exhausted', dependencies);
|
|
160
|
+
}
|
|
161
|
+
async function runCaseWithSoftTimeout(testCase, controller, timeoutMilliseconds, dependencies) {
|
|
162
|
+
if (timeoutMilliseconds === null) {
|
|
163
|
+
return await runTestCase(testCase, dependencies.wallClock, { signal: controller.signal });
|
|
164
|
+
}
|
|
165
|
+
const timing = { timedOut: false };
|
|
166
|
+
const softTimeout = dependencies.wallClock.setTimeout(function abortTimedOutCase() {
|
|
167
|
+
timing.timedOut = true;
|
|
168
|
+
controller.abort();
|
|
169
|
+
}, timeoutMilliseconds);
|
|
170
|
+
const executedCase = await runTestCase(testCase, dependencies.wallClock, { signal: controller.signal });
|
|
171
|
+
clearTimer(dependencies.wallClock, softTimeout);
|
|
172
|
+
if (timing.timedOut) {
|
|
173
|
+
return resultWithTimeoutFailure(executedCase, timeoutMilliseconds, executedCase.wallTimeMs);
|
|
174
|
+
}
|
|
175
|
+
return executedCase;
|
|
176
|
+
}
|
|
177
|
+
function invalidTimeoutCase(testCase, failure) {
|
|
178
|
+
return {
|
|
179
|
+
result: failCase(testCase.id, [failure]),
|
|
180
|
+
wallTimeMs: 0
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
function registerActiveCase(input) {
|
|
184
|
+
const key = caseIdentityKey(input.testCase.id);
|
|
185
|
+
const startedAtMilliseconds = input.dependencies.wallClock.currentTimestampInMilliseconds;
|
|
186
|
+
const hardTimeout = input.timeoutPolicy === null || input.timeoutPolicy === undefined
|
|
187
|
+
? null
|
|
188
|
+
: input.dependencies.wallClock.setTimeout(function hardTimeoutActiveCases() {
|
|
189
|
+
completeActiveCasesWithCrash(input.supervision, input.dependencies);
|
|
190
|
+
}, input.timeoutPolicy.hardTimeoutMilliseconds);
|
|
191
|
+
const activeCase = {
|
|
192
|
+
abort() {
|
|
193
|
+
input.controller.abort();
|
|
194
|
+
},
|
|
195
|
+
completion: input.completion,
|
|
196
|
+
hardTimeout,
|
|
197
|
+
startedAtMilliseconds,
|
|
198
|
+
testCase: input.testCase
|
|
199
|
+
};
|
|
200
|
+
input.supervision.addActiveCase(key, activeCase);
|
|
201
|
+
return activeCase;
|
|
202
|
+
}
|
|
203
|
+
function completeFinishedActiveCase(input, executedCase) {
|
|
204
|
+
const key = caseIdentityKey(input.testCase.id);
|
|
205
|
+
if (input.supervision.activeCases.get(key) === input.activeCase) {
|
|
206
|
+
input.supervision.removeActiveCase(key);
|
|
207
|
+
clearTimer(input.dependencies.wallClock, input.activeCase.hardTimeout);
|
|
208
|
+
input.completion.complete(executedCase);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function createInconclusiveCaseResult(testCase, error) {
|
|
212
|
+
const reason = error instanceof Error ? error.message : 'Unknown test execution error.';
|
|
213
|
+
const outcome = {
|
|
214
|
+
kind: 'inconclusive',
|
|
215
|
+
reason: `Test execution failed before producing a result: ${reason}`
|
|
216
|
+
};
|
|
217
|
+
return {
|
|
218
|
+
id: testCase.id,
|
|
219
|
+
outcome,
|
|
220
|
+
verdict: verdictFromOutcome(outcome)
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
function completeUnexpectedBodyError(input, error) {
|
|
224
|
+
completeFinishedActiveCase(input, {
|
|
225
|
+
result: createInconclusiveCaseResult(input.testCase, error),
|
|
226
|
+
wallTimeMs: input.dependencies.wallClock.currentTimestampInMilliseconds -
|
|
227
|
+
input.activeCase.startedAtMilliseconds
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
async function runCaseBodyUnderSupervision(input) {
|
|
231
|
+
try {
|
|
232
|
+
const executedCase = await Promise.race([
|
|
233
|
+
runCaseWithSoftTimeout(input.testCase, input.controller, input.timeoutMilliseconds, input.dependencies),
|
|
234
|
+
input.completion.promise
|
|
235
|
+
]);
|
|
236
|
+
completeFinishedActiveCase(input, executedCase);
|
|
237
|
+
return executedCase;
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
const fallbackCase = {
|
|
241
|
+
result: createInconclusiveCaseResult(input.testCase, error),
|
|
242
|
+
wallTimeMs: input.dependencies.wallClock.currentTimestampInMilliseconds -
|
|
243
|
+
input.activeCase.startedAtMilliseconds
|
|
244
|
+
};
|
|
245
|
+
completeUnexpectedBodyError(input, error);
|
|
246
|
+
return fallbackCase;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function createCaseBodyInput(input, activeCase, timeoutMilliseconds) {
|
|
250
|
+
return {
|
|
251
|
+
...input,
|
|
252
|
+
activeCase,
|
|
253
|
+
timeoutMilliseconds
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function registerCaseBodyInput(input, timeoutMilliseconds) {
|
|
257
|
+
return createCaseBodyInput(input, registerActiveCase(input), timeoutMilliseconds);
|
|
258
|
+
}
|
|
259
|
+
function createActiveCaseInput(testCase, timeoutPolicy, supervision, dependencies) {
|
|
260
|
+
return {
|
|
261
|
+
completion: createCaseCompletion(),
|
|
262
|
+
controller: new AbortController(),
|
|
263
|
+
dependencies,
|
|
264
|
+
supervision,
|
|
265
|
+
testCase,
|
|
266
|
+
timeoutPolicy
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function observedGrowthBytesPerSecond(sample, previousSample) {
|
|
270
|
+
if (previousSample === null) {
|
|
271
|
+
return 0;
|
|
272
|
+
}
|
|
273
|
+
const elapsedMilliseconds = sample.capturedAtMilliseconds - previousSample.capturedAtMilliseconds;
|
|
274
|
+
if (elapsedMilliseconds <= 0) {
|
|
275
|
+
return 0;
|
|
276
|
+
}
|
|
277
|
+
return Math.max(0, (sample.residentSetBytes - previousSample.residentSetBytes) * millisecondsPerSecond / elapsedMilliseconds);
|
|
278
|
+
}
|
|
279
|
+
function observedBudgetValue(metric, sample, previousSample) {
|
|
280
|
+
const observedValues = {
|
|
281
|
+
activeResourceCount: sample.activeResourceCount,
|
|
282
|
+
javaScriptEngineHeapBytes: sample.javaScriptEngineHeapBytes,
|
|
283
|
+
residentSetBytes: sample.residentSetBytes,
|
|
284
|
+
residentSetGrowthBytesPerSecond: observedGrowthBytesPerSecond(sample, previousSample)
|
|
285
|
+
};
|
|
286
|
+
return observedValues[metric];
|
|
287
|
+
}
|
|
288
|
+
function findResourceBudgetBreach(budgets, sample, previousSample) {
|
|
289
|
+
if (budgets === null || budgets === undefined) {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
for (const metric of resourceBudgetMetrics) {
|
|
293
|
+
const budget = budgets[metric];
|
|
294
|
+
const observed = observedBudgetValue(metric, sample, previousSample);
|
|
295
|
+
if (budget !== null && observed > budget) {
|
|
296
|
+
return { budget, metric, observed, sample };
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
301
|
+
export function recordResourceUsageSample(input) {
|
|
302
|
+
const breach = findResourceBudgetBreach(input.budgets, input.sample, input.previousSample);
|
|
303
|
+
if (breach === null) {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
completeActiveCasesWithResourceExhaustion(breach, input.supervision, input.dependencies);
|
|
307
|
+
return true;
|
|
308
|
+
}
|
|
309
|
+
export async function executeCaseBody(testCase, timeoutPolicy, supervision, dependencies) {
|
|
310
|
+
const timeoutResolution = resolveSoftTimeout(testCase, timeoutPolicy);
|
|
311
|
+
if (timeoutResolution.kind === 'failure') {
|
|
312
|
+
return invalidTimeoutCase(testCase, timeoutResolution.failure);
|
|
313
|
+
}
|
|
314
|
+
return await runCaseBodyUnderSupervision(registerCaseBodyInput(createActiveCaseInput(testCase, timeoutPolicy, supervision, dependencies), timeoutResolution.milliseconds));
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=execution-supervision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-supervision.js","sourceRoot":"","sources":["../../../../source/engine/execution-supervision.ts"],"names":[],"mappings":"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"}
|
package/engine/execution.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { WallClock } from '@enormora/wall-clock';
|
|
2
|
+
import { type ExecuteResourceBudgets, type ExecuteTimeoutPolicy } from './execution-supervision.ts';
|
|
2
3
|
import { type OutputRenderer } from './reporter-output.ts';
|
|
3
4
|
import type { ReporterDispatcher } from './reporter-dispatcher.ts';
|
|
4
5
|
import { type Reporter, type RunFacts } from './reporter.ts';
|
|
5
|
-
import {
|
|
6
|
+
import type { RunResourceUsageTracker, RunResult } from './run-result.ts';
|
|
6
7
|
import type { TestPlan } from './test-plan.ts';
|
|
7
8
|
export type ExecuteExecution = {
|
|
8
9
|
readonly mode: 'concurrent-in-process' | 'serial-in-process';
|
|
@@ -11,9 +12,11 @@ export type ExecuteOptions = {
|
|
|
11
12
|
readonly execution: ExecuteExecution;
|
|
12
13
|
readonly outputRenderer?: OutputRenderer;
|
|
13
14
|
readonly reporters: readonly Reporter[];
|
|
15
|
+
readonly resourceBudgets?: ExecuteResourceBudgets | null;
|
|
14
16
|
readonly resourceUsageTracker?: RunResourceUsageTracker | null;
|
|
15
17
|
readonly runFacts: RunFacts;
|
|
16
18
|
readonly startedAt: string;
|
|
19
|
+
readonly timeoutPolicy?: ExecuteTimeoutPolicy | null;
|
|
17
20
|
};
|
|
18
21
|
export type ExecuteDependencies = {
|
|
19
22
|
readonly reporterDispatcher: ReporterDispatcher;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../../source/engine/execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../../source/engine/execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAKH,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAE5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAyB,MAAM,eAAe,CAAC;AAEpF,OAAO,KAAK,EAGR,uBAAuB,EACvB,SAAS,EAEZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,gBAAgB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,uBAAuB,GAAG,mBAAmB,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC/D,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACxD,CAAC;AAMF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CACjC,CAAC;AAweF,MAAM,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAE3F,wBAAgB,aAAa,CAAC,YAAY,EAAE,mBAAmB,GAAG,OAAO,CAWxE"}
|