@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.
Files changed (36) hide show
  1. package/diff/diff-shape.d.ts +7 -2
  2. package/diff/diff-shape.d.ts.map +1 -1
  3. package/engine/assertion-recorder.js +242 -0
  4. package/engine/assertion-recorder.js.map +1 -0
  5. package/engine/case-execution.js +31 -247
  6. package/engine/case-execution.js.map +1 -1
  7. package/engine/execution-result.js +12 -4
  8. package/engine/execution-result.js.map +1 -1
  9. package/engine/execution-supervision.d.ts +50 -0
  10. package/engine/execution-supervision.d.ts.map +1 -0
  11. package/engine/execution-supervision.js +316 -0
  12. package/engine/execution-supervision.js.map +1 -0
  13. package/engine/execution.d.ts +4 -1
  14. package/engine/execution.d.ts.map +1 -1
  15. package/engine/execution.js +70 -61
  16. package/engine/execution.js.map +1 -1
  17. package/engine/reporter-output.d.ts +8 -1
  18. package/engine/reporter-output.d.ts.map +1 -1
  19. package/engine/reporter-output.js +9 -2
  20. package/engine/reporter-output.js.map +1 -1
  21. package/engine/reporter.d.ts +9 -3
  22. package/engine/reporter.d.ts.map +1 -1
  23. package/engine/reporter.js +7 -0
  24. package/engine/reporter.js.map +1 -1
  25. package/engine/run-result.d.ts +15 -5
  26. package/engine/run-result.d.ts.map +1 -1
  27. package/engine/run-result.js.map +1 -1
  28. package/engine/test-node.d.ts +1 -0
  29. package/engine/test-node.d.ts.map +1 -1
  30. package/engine/test-node.js.map +1 -1
  31. package/package.json +3 -1
  32. package/packages/engine/engine.entry-point.d.ts +4 -4
  33. package/packages/engine/engine.entry-point.d.ts.map +1 -1
  34. package/packages/engine/engine.entry-point.js +2 -2
  35. package/packages/engine/engine.entry-point.js.map +1 -1
  36. 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.outcome.kind === 'fail';
3
+ return testResult.verdict === 'fail';
4
4
  }
5
5
  function isInconclusive(testResult) {
6
- return testResult.outcome.kind === 'inconclusive';
6
+ return testResult.verdict === 'inconclusive';
7
7
  }
8
8
  function hasPassed(testResult) {
9
- return testResult.outcome.kind === 'pass';
9
+ return testResult.verdict === 'pass';
10
10
  }
11
11
  function wasSkipped(testResult) {
12
- return testResult.outcome.kind === 'skip';
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":"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"}
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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"}
@@ -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 { type RunResourceUsageTracker, type RunResult } from './run-result.ts';
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;AAGtD,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,EAGH,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EAEjB,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,oBAAoB,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC/D,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B,CAAC;AAMF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CACjC,CAAC;AA0cF,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"}
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"}