@overkill-dev/engine 0.0.40 → 0.0.41

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 (53) hide show
  1. package/clock/overkill-clock.d.ts +30 -0
  2. package/clock/overkill-clock.d.ts.map +1 -0
  3. package/clock/overkill-clock.js +53 -0
  4. package/clock/overkill-clock.js.map +1 -0
  5. package/engine/case-execution.d.ts +3 -3
  6. package/engine/case-execution.d.ts.map +1 -1
  7. package/engine/case-execution.js +20 -10
  8. package/engine/case-execution.js.map +1 -1
  9. package/engine/engine.d.ts +2 -2
  10. package/engine/engine.d.ts.map +1 -1
  11. package/engine/execution-async-leak-policy.js +2 -2
  12. package/engine/execution-async-leak-policy.js.map +1 -1
  13. package/engine/execution-global-error-observer.d.ts +20 -0
  14. package/engine/execution-global-error-observer.d.ts.map +1 -0
  15. package/engine/execution-global-error-observer.js +339 -0
  16. package/engine/execution-global-error-observer.js.map +1 -0
  17. package/engine/execution-result.js +5 -1
  18. package/engine/execution-result.js.map +1 -1
  19. package/engine/execution-supervision.d.ts +7 -5
  20. package/engine/execution-supervision.d.ts.map +1 -1
  21. package/engine/execution-supervision.js +36 -24
  22. package/engine/execution-supervision.js.map +1 -1
  23. package/engine/execution-test-plan-cases.js +72 -14
  24. package/engine/execution-test-plan-cases.js.map +1 -1
  25. package/engine/execution.d.ts +2 -2
  26. package/engine/execution.d.ts.map +1 -1
  27. package/engine/execution.js +38 -20
  28. package/engine/execution.js.map +1 -1
  29. package/engine/reporter-dispatcher.d.ts +2 -2
  30. package/engine/reporter-dispatcher.d.ts.map +1 -1
  31. package/engine/reporter.d.ts +1 -1
  32. package/engine/reporter.d.ts.map +1 -1
  33. package/engine/resource-usage-growth.js +4 -4
  34. package/engine/resource-usage-growth.js.map +1 -1
  35. package/engine/run-result.d.ts +82 -7
  36. package/engine/run-result.d.ts.map +1 -1
  37. package/engine/run-result.js +112 -0
  38. package/engine/run-result.js.map +1 -1
  39. package/engine/run-timings.d.ts +68 -0
  40. package/engine/run-timings.d.ts.map +1 -0
  41. package/engine/run-timings.js +116 -0
  42. package/engine/run-timings.js.map +1 -0
  43. package/engine/test-data.d.ts +4 -0
  44. package/engine/test-data.d.ts.map +1 -1
  45. package/engine/test-data.js +14 -1
  46. package/engine/test-data.js.map +1 -1
  47. package/package.json +3 -2
  48. package/packages/engine/engine.entry-point.d.ts +5 -3
  49. package/packages/engine/engine.entry-point.d.ts.map +1 -1
  50. package/packages/engine/engine.entry-point.js +3 -3
  51. package/packages/engine/engine.entry-point.js.map +1 -1
  52. package/readme.md +3 -1
  53. package/sbom.cdx.json +4 -21
@@ -0,0 +1,339 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { caseIdentityKey } from "./identity.js";
3
+ import { permissionDeniedRunnerErrorFromThrown } from "./run-result.js";
4
+ function createStoredValue(initialValue) {
5
+ let currentValue = initialValue;
6
+ return {
7
+ read() {
8
+ return currentValue;
9
+ },
10
+ write(value) {
11
+ currentValue = value;
12
+ }
13
+ };
14
+ }
15
+ function createRunErrorScope(boundary) {
16
+ const activeCaseKeys = new Set();
17
+ const errors = [];
18
+ const fatal = createStoredValue(false);
19
+ const fatalHandlers = new Set();
20
+ const fatalSignal = createStoredValue(null);
21
+ const phase = createStoredValue('run');
22
+ const stopped = createStoredValue(false);
23
+ function notifyFatal(error) {
24
+ if (!fatal.read()) {
25
+ fatal.write(true);
26
+ fatalSignal.read()?.resolve(undefined);
27
+ }
28
+ for (const handler of fatalHandlers) {
29
+ handler(error);
30
+ }
31
+ }
32
+ return {
33
+ activeCaseStarted(key) {
34
+ activeCaseKeys.add(key);
35
+ },
36
+ activeCaseStopped(key) {
37
+ activeCaseKeys.delete(key);
38
+ },
39
+ boundary,
40
+ async fatalSignal() {
41
+ if (fatal.read()) {
42
+ return;
43
+ }
44
+ const currentFatalSignal = fatalSignal.read() ?? Promise.withResolvers();
45
+ fatalSignal.write(currentFatalSignal);
46
+ await currentFatalSignal.promise;
47
+ },
48
+ hasActiveCase(key) {
49
+ return activeCaseKeys.has(key);
50
+ },
51
+ hasFatalError() {
52
+ return fatal.read();
53
+ },
54
+ onFatalError(handler) {
55
+ fatalHandlers.add(handler);
56
+ return function removeFatalErrorHandler() {
57
+ fatalHandlers.delete(handler);
58
+ };
59
+ },
60
+ phase() {
61
+ return phase.read();
62
+ },
63
+ recordError(error) {
64
+ if (stopped.read()) {
65
+ return;
66
+ }
67
+ errors.push(error);
68
+ notifyFatal(error);
69
+ },
70
+ async runPhase(nextPhase, run) {
71
+ const previousPhase = phase.read();
72
+ phase.write(nextPhase);
73
+ try {
74
+ return await run();
75
+ }
76
+ finally {
77
+ phase.write(previousPhase);
78
+ }
79
+ },
80
+ stop() {
81
+ stopped.write(true);
82
+ fatalHandlers.clear();
83
+ },
84
+ takeErrors() {
85
+ const currentErrors = Array.from(errors);
86
+ errors.length = 0;
87
+ return currentErrors;
88
+ }
89
+ };
90
+ }
91
+ function createActiveScopes() {
92
+ const scopes = [];
93
+ return {
94
+ add(scope) {
95
+ scopes.push(scope);
96
+ },
97
+ all() {
98
+ return Array.from(scopes);
99
+ },
100
+ includes(scope) {
101
+ return scopes.includes(scope);
102
+ },
103
+ remove(scope) {
104
+ const index = scopes.lastIndexOf(scope);
105
+ if (index !== -1) {
106
+ scopes.splice(index, 1);
107
+ }
108
+ },
109
+ size() {
110
+ return scopes.length;
111
+ }
112
+ };
113
+ }
114
+ export function createDisabledExecutionGlobalErrorObserver() {
115
+ const neverFatal = Promise.race([]);
116
+ return {
117
+ async fatalSignal() {
118
+ await neverFatal;
119
+ },
120
+ hasFatalError() {
121
+ return false;
122
+ },
123
+ onFatalError() {
124
+ return function removeDisabledFatalHandler() {
125
+ return undefined;
126
+ };
127
+ },
128
+ async runBoundary(run) {
129
+ return await run();
130
+ },
131
+ async runCase(_testCase, run) {
132
+ return await run();
133
+ },
134
+ async runPhase(_phase, run) {
135
+ return await run();
136
+ },
137
+ stop() {
138
+ return undefined;
139
+ },
140
+ takeErrors() {
141
+ return [];
142
+ }
143
+ };
144
+ }
145
+ const runScopeStorage = new AsyncLocalStorage();
146
+ const activeCaseStorage = new AsyncLocalStorage();
147
+ const activeScopes = createActiveScopes();
148
+ const listenersInstalled = createStoredValue(false);
149
+ function serializedReason(reason) {
150
+ if (reason instanceof Error) {
151
+ return {
152
+ message: reason.message,
153
+ name: reason.name,
154
+ stack: reason.stack ?? null
155
+ };
156
+ }
157
+ return {
158
+ message: String(reason),
159
+ name: 'Error',
160
+ stack: null
161
+ };
162
+ }
163
+ function hookSubtype(hook) {
164
+ return hook === 'uncaughtException' ? 'uncaught-exception' : 'unhandled-rejection';
165
+ }
166
+ function hookMessage(hook, reason) {
167
+ const label = hook === 'uncaughtException' ? 'Uncaught exception' : 'Unhandled rejection';
168
+ return `${label}: ${reason.message}`;
169
+ }
170
+ function hookCause(scope, hook, reason, activeCase) {
171
+ return {
172
+ boundary: scope.boundary,
173
+ hook,
174
+ origin: {
175
+ case: activeCase?.id ?? null,
176
+ work: activeCase?.workId ?? null
177
+ },
178
+ phase: activeCase === null ? scope.phase() : 'body',
179
+ reason: serializedReason(reason)
180
+ };
181
+ }
182
+ function attributedError(scope, hook, reason, activeCase) {
183
+ const cause = hookCause(scope, hook, reason, activeCase);
184
+ return {
185
+ attributedTo: activeCase.id,
186
+ attributedToWork: activeCase.workId,
187
+ cause,
188
+ message: hookMessage(hook, cause.reason),
189
+ subtype: hookSubtype(hook)
190
+ };
191
+ }
192
+ function runLevelHookError(scope, hook, reason) {
193
+ const cause = hookCause(scope, hook, reason, null);
194
+ return {
195
+ attributedTo: null,
196
+ attributedToWork: null,
197
+ cause,
198
+ message: hookMessage(hook, cause.reason),
199
+ subtype: hookSubtype(hook)
200
+ };
201
+ }
202
+ function attributionDriftError(scope, hook, reason, activeCase) {
203
+ const cause = hookCause(scope, hook, reason, activeCase);
204
+ return {
205
+ attributedTo: null,
206
+ attributedToWork: null,
207
+ cause,
208
+ message: `Async failure could not be attributed safely: ${cause.reason.message}`,
209
+ subtype: 'attribution-drift'
210
+ };
211
+ }
212
+ function scopeIncludesCase(scope, activeCase) {
213
+ return activeCase !== null && activeCase.scope === scope;
214
+ }
215
+ function activePermissionCase(input) {
216
+ if (!scopeIncludesCase(input.scope, input.activeCase)) {
217
+ return null;
218
+ }
219
+ return input.scope.hasActiveCase(input.activeCase.key) ? input.activeCase : null;
220
+ }
221
+ function permissionErrorForScope(input) {
222
+ const activeCase = activePermissionCase(input);
223
+ return permissionDeniedRunnerErrorFromThrown(input.reason, {
224
+ attributedTo: activeCase?.id ?? null,
225
+ attributedToWork: activeCase?.workId ?? null,
226
+ boundary: input.scope.boundary,
227
+ diagnosticChannel: null,
228
+ hook: input.hook,
229
+ phase: activeCase === null ? input.scope.phase() : 'body'
230
+ });
231
+ }
232
+ function errorForScope(input) {
233
+ const permissionError = permissionErrorForScope(input);
234
+ if (permissionError !== null) {
235
+ return permissionError;
236
+ }
237
+ if (input.ambiguousScope) {
238
+ return attributionDriftError(input.scope, input.hook, input.reason, scopeIncludesCase(input.scope, input.activeCase) ? input.activeCase : null);
239
+ }
240
+ if (!scopeIncludesCase(input.scope, input.activeCase)) {
241
+ return runLevelHookError(input.scope, input.hook, input.reason);
242
+ }
243
+ if (input.scope.hasActiveCase(input.activeCase.key)) {
244
+ return attributedError(input.scope, input.hook, input.reason, input.activeCase);
245
+ }
246
+ return attributionDriftError(input.scope, input.hook, input.reason, input.activeCase);
247
+ }
248
+ function currentTargetScopes() {
249
+ const currentScope = runScopeStorage.getStore();
250
+ if (currentScope !== undefined && activeScopes.includes(currentScope)) {
251
+ return [currentScope];
252
+ }
253
+ return activeScopes.all();
254
+ }
255
+ function receiveHookFailure(hook, reason) {
256
+ const activeCase = activeCaseStorage.getStore() ?? null;
257
+ const ambiguousScope = runScopeStorage.getStore() === undefined && activeScopes.size() > 1;
258
+ for (const scope of currentTargetScopes()) {
259
+ scope.recordError(errorForScope({ activeCase, ambiguousScope, hook, reason, scope }));
260
+ }
261
+ }
262
+ function receiveUnhandledRejection(reason) {
263
+ receiveHookFailure('unhandledRejection', reason);
264
+ }
265
+ function receiveUncaughtException(error) {
266
+ receiveHookFailure('uncaughtException', error);
267
+ }
268
+ function createProcessHookListeners() {
269
+ return {
270
+ install() {
271
+ if (listenersInstalled.read()) {
272
+ return;
273
+ }
274
+ process.prependListener('unhandledRejection', receiveUnhandledRejection);
275
+ process.prependListener('uncaughtException', receiveUncaughtException);
276
+ listenersInstalled.write(true);
277
+ },
278
+ removeWhenIdle() {
279
+ if (listenersInstalled.read() && activeScopes.size() === 0) {
280
+ process.removeListener('unhandledRejection', receiveUnhandledRejection);
281
+ process.removeListener('uncaughtException', receiveUncaughtException);
282
+ listenersInstalled.write(false);
283
+ }
284
+ }
285
+ };
286
+ }
287
+ const processHookListeners = createProcessHookListeners();
288
+ export function createExecutionGlobalErrorObserver(boundary) {
289
+ const scope = createRunErrorScope(boundary);
290
+ return {
291
+ async fatalSignal() {
292
+ await scope.fatalSignal();
293
+ },
294
+ hasFatalError() {
295
+ return scope.hasFatalError();
296
+ },
297
+ onFatalError(handler) {
298
+ return scope.onFatalError(handler);
299
+ },
300
+ async runBoundary(run) {
301
+ processHookListeners.install();
302
+ activeScopes.add(scope);
303
+ try {
304
+ return await runScopeStorage.run(scope, run);
305
+ }
306
+ finally {
307
+ activeScopes.remove(scope);
308
+ processHookListeners.removeWhenIdle();
309
+ }
310
+ },
311
+ async runCase(testCase, run) {
312
+ const activeCase = {
313
+ id: testCase.id,
314
+ key: caseIdentityKey(testCase.id),
315
+ scope,
316
+ workId: testCase.workId
317
+ };
318
+ scope.activeCaseStarted(activeCase.key);
319
+ try {
320
+ return await activeCaseStorage.run(activeCase, run);
321
+ }
322
+ finally {
323
+ scope.activeCaseStopped(activeCase.key);
324
+ }
325
+ },
326
+ async runPhase(phase, run) {
327
+ return await scope.runPhase(phase, run);
328
+ },
329
+ stop() {
330
+ scope.stop();
331
+ activeScopes.remove(scope);
332
+ processHookListeners.removeWhenIdle();
333
+ },
334
+ takeErrors() {
335
+ return scope.takeErrors();
336
+ }
337
+ };
338
+ }
339
+ //# sourceMappingURL=execution-global-error-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-global-error-observer.js","sourceRoot":"","sources":["../../../../source/engine/execution-global-error-observer.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { workIdentityKey } from "./identity.js";
2
2
  import { runStatusFromPlan, runStatusFromSummary } from "./run-result.js";
3
+ import { summaryRunTimings } from "./run-timings.js";
3
4
  export function appendRunnerErrors(result, runnerErrors) {
4
5
  if (runnerErrors.length === 0) {
5
6
  return result;
@@ -110,7 +111,10 @@ export function createRunResult(testPlan, perTest, reporterErrors, timing) {
110
111
  runnerErrors: reporterErrors,
111
112
  status: runStatusFromPlan(summary, reporterErrors, timing.planStatus),
112
113
  summary,
113
- wallTimeMs: timing.wallClock.currentTimestampInMilliseconds - timing.startedAtMs
114
+ timings: summaryRunTimings({
115
+ testExecutionWallTimeMicroseconds: timing.testExecutionWallTimeMicroseconds,
116
+ totalWallTimeMicroseconds: timing.completedAtMicroseconds - timing.startedAtMicroseconds
117
+ })
114
118
  };
115
119
  }
116
120
  //# sourceMappingURL=execution-result.js.map
@@ -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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"}
@@ -1,8 +1,9 @@
1
- import type { WallClock } from '@enormora/wall-clock';
1
+ import type { OverkillClock } from '../clock/overkill-clock.ts';
2
2
  import { type TestRuntimePolicy } from './case-execution.ts';
3
3
  import { type PerTestResult, type ResourceUsageSnapshot, type RunnerError } from './run-result.ts';
4
4
  import type { TestPlanCase } from './test-plan.ts';
5
5
  import { type ExecuteResourceBudgets } from './execution-resource-budget-breach.ts';
6
+ import type { ExecutionGlobalErrorObserver } from './execution-global-error-observer.ts';
6
7
  export type ExecuteTimeoutPolicy = {
7
8
  readonly hardTimeoutMilliseconds: number;
8
9
  readonly timeoutMilliseconds: number;
@@ -10,11 +11,12 @@ export type ExecuteTimeoutPolicy = {
10
11
  export type ConcurrentCase = {
11
12
  readonly result: PerTestResult;
12
13
  readonly runnerErrors: readonly RunnerError[];
13
- readonly wallTimeMs: number;
14
+ readonly durationMicroseconds: number;
14
15
  };
15
16
  export type ExecutionSupervisionDependencies = {
17
+ readonly globalErrorObserver: ExecutionGlobalErrorObserver;
16
18
  readonly runtimePolicy?: TestRuntimePolicy | null;
17
- readonly wallClock: WallClock;
19
+ readonly wallClock: OverkillClock;
18
20
  };
19
21
  type CaseCompletion = {
20
22
  readonly complete: (executedCase: ConcurrentCase) => void;
@@ -23,8 +25,8 @@ type CaseCompletion = {
23
25
  type ActiveCase = {
24
26
  readonly abort: () => void;
25
27
  readonly completion: CaseCompletion;
26
- readonly hardTimeout: ReturnType<WallClock['setTimeout']> | null;
27
- readonly startedAtMilliseconds: number;
28
+ readonly hardTimeout: ReturnType<OverkillClock['setTimeout']> | null;
29
+ readonly startedAtMicroseconds: number;
28
30
  readonly testCase: TestPlanCase;
29
31
  };
30
32
  export type ExecutionSupervision = {
@@ -1 +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;AACtD,OAAO,EAIH,KAAK,iBAAiB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAEH,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAEH,KAAK,sBAAsB,EAE9B,MAAM,uCAAuC,CAAC;AAE/C,MAAM,MAAM,oBAAoB,GAAG;IAC/B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACxC,CAAC;AACF,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B,CAAC;AACF,MAAM,MAAM,gCAAgC,GAAG;IAC3C,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CACjC,CAAC;AACF,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;AACF,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;AAeF,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;AAEF,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,CAezB"}
1
+ {"version":3,"file":"execution-supervision.d.ts","sourceRoot":"","sources":["../../../../source/engine/execution-supervision.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { invalidTimeoutControlFailure, runTestCase, timeoutFailure } from "./case-execution.js";
2
2
  import { workIdentityKey } from "./identity.js";
3
- import { verdictFromOutcome } from "./run-result.js";
3
+ import { isPermissionDeniedRunnerError, verdictFromOutcome } from "./run-result.js";
4
4
  import { findResourceBudgetBreach } from "./execution-resource-budget-breach.js";
5
5
  export function createExecutionSupervision() {
6
6
  const activeCases = new Map();
@@ -26,20 +26,20 @@ function createCaseCompletion() {
26
26
  promise
27
27
  };
28
28
  }
29
- function createTerminalCase(testCase, verdict, wallTimeMs) {
29
+ function createTerminalCase(testCase, verdict, durationMicroseconds) {
30
30
  return {
31
31
  result: {
32
32
  id: testCase.id,
33
33
  outcome: null,
34
34
  verdict,
35
35
  workId: testCase.workId,
36
- wallTimeMs
36
+ durationMicroseconds
37
37
  },
38
38
  runnerErrors: [],
39
- wallTimeMs
39
+ durationMicroseconds
40
40
  };
41
41
  }
42
- function failCase(testCase, failures, wallTimeMs) {
42
+ function failCase(testCase, failures, durationMicroseconds) {
43
43
  const outcome = {
44
44
  failures,
45
45
  kind: 'fail'
@@ -49,7 +49,7 @@ function failCase(testCase, failures, wallTimeMs) {
49
49
  outcome,
50
50
  verdict: verdictFromOutcome(outcome),
51
51
  workId: testCase.workId,
52
- wallTimeMs
52
+ durationMicroseconds
53
53
  };
54
54
  }
55
55
  function timeoutControlValue(testCase) {
@@ -92,7 +92,7 @@ function resultWithTimeoutFailure(executedCase, deadlineMilliseconds, elapsedMil
92
92
  }
93
93
  return {
94
94
  ...executedCase,
95
- result: failCase(executedCase.result, [failure], executedCase.wallTimeMs)
95
+ result: failCase(executedCase.result, [failure], executedCase.durationMicroseconds)
96
96
  };
97
97
  }
98
98
  function clearTimer(wallClock, timer) {
@@ -102,14 +102,15 @@ function clearTimer(wallClock, timer) {
102
102
  }
103
103
  function policyCheckedCase(testCase, executedCase, supervision, dependencies) {
104
104
  const errors = dependencies.runtimePolicy?.takeCaseErrors(testCase) ?? [];
105
- if (errors.length === 0) {
105
+ const hasCasePermissionError = executedCase.runnerErrors.some(isPermissionDeniedRunnerError);
106
+ if (errors.length === 0 && !hasCasePermissionError) {
106
107
  return executedCase;
107
108
  }
108
109
  for (const error of errors) {
109
110
  supervision.recordRunnerError(error);
110
111
  }
111
112
  return {
112
- ...createTerminalCase(testCase, 'runtime-policy', executedCase.wallTimeMs),
113
+ ...createTerminalCase(testCase, 'runtime-policy', executedCase.durationMicroseconds),
113
114
  runnerErrors: executedCase.runnerErrors
114
115
  };
115
116
  }
@@ -157,7 +158,7 @@ function completeActiveCasesAs(supervision, verdict, dependencies) {
157
158
  supervision.removeActiveCase(key);
158
159
  activeCase.abort();
159
160
  clearTimer(dependencies.wallClock, activeCase.hardTimeout);
160
- activeCase.completion.complete(createTerminalCase(activeCase.testCase, verdict, dependencies.wallClock.currentTimestampInMilliseconds - activeCase.startedAtMilliseconds));
161
+ activeCase.completion.complete(createTerminalCase(activeCase.testCase, verdict, dependencies.wallClock.currentMonotonicMicroseconds - activeCase.startedAtMicroseconds));
161
162
  }
162
163
  }
163
164
  function completeActiveCasesWithCrash(supervision, dependencies) {
@@ -171,6 +172,11 @@ function completeActiveCasesWithCrash(supervision, dependencies) {
171
172
  completeActiveCasesAs(supervision, 'crashed', dependencies);
172
173
  }
173
174
  }
175
+ function completeActiveCasesAfterGlobalError(supervision, dependencies) {
176
+ if (supervision.activeCases.size > 0) {
177
+ completeActiveCasesAs(supervision, 'crashed', dependencies);
178
+ }
179
+ }
174
180
  function completeActiveCasesWithResourceExhaustion(breach, supervision, dependencies) {
175
181
  const cause = {
176
182
  ...breach,
@@ -200,7 +206,7 @@ async function runCaseWithSoftTimeout(input) {
200
206
  const executedCase = await runTestCaseWithPolicy(input.testCase, input.controller, input.supervision, input.dependencies);
201
207
  clearTimer(input.dependencies.wallClock, softTimeout);
202
208
  if (timing.timedOut) {
203
- return resultWithTimeoutFailure(executedCase, input.timeoutMilliseconds, executedCase.wallTimeMs);
209
+ return resultWithTimeoutFailure(executedCase, input.timeoutMilliseconds, executedCase.durationMicroseconds);
204
210
  }
205
211
  return executedCase;
206
212
  }
@@ -208,12 +214,12 @@ function invalidTimeoutCase(testCase, failure) {
208
214
  return {
209
215
  result: failCase(testCase, [failure], 0),
210
216
  runnerErrors: [],
211
- wallTimeMs: 0
217
+ durationMicroseconds: 0
212
218
  };
213
219
  }
214
220
  function registerActiveCase(input) {
215
221
  const key = workIdentityKey(input.testCase.workId);
216
- const startedAtMilliseconds = input.dependencies.wallClock.currentTimestampInMilliseconds;
222
+ const startedAtMicroseconds = input.dependencies.wallClock.currentMonotonicMicroseconds;
217
223
  const hardTimeout = input.timeoutPolicy === null || input.timeoutPolicy === undefined
218
224
  ? null
219
225
  : input.dependencies.wallClock.setTimeout(function hardTimeoutActiveCases() {
@@ -225,7 +231,7 @@ function registerActiveCase(input) {
225
231
  },
226
232
  completion: input.completion,
227
233
  hardTimeout,
228
- startedAtMilliseconds,
234
+ startedAtMicroseconds,
229
235
  testCase: input.testCase
230
236
  };
231
237
  input.supervision.addActiveCase(key, activeCase);
@@ -239,7 +245,7 @@ function completeFinishedActiveCase(input, executedCase) {
239
245
  input.completion.complete(executedCase);
240
246
  }
241
247
  }
242
- function createInconclusiveCaseResult(testCase, error, wallTimeMs) {
248
+ function createInconclusiveCaseResult(testCase, error, durationMicroseconds) {
243
249
  const reason = error instanceof Error ? error.message : 'Unknown test execution error.';
244
250
  const outcome = {
245
251
  kind: 'inconclusive',
@@ -250,19 +256,22 @@ function createInconclusiveCaseResult(testCase, error, wallTimeMs) {
250
256
  outcome,
251
257
  verdict: verdictFromOutcome(outcome),
252
258
  workId: testCase.workId,
253
- wallTimeMs
259
+ durationMicroseconds
254
260
  };
255
261
  }
256
262
  function completeUnexpectedBodyError(input, error) {
257
- const wallTimeMs = input.dependencies.wallClock.currentTimestampInMilliseconds -
258
- input.activeCase.startedAtMilliseconds;
263
+ const durationMicroseconds = input.dependencies.wallClock.currentMonotonicMicroseconds -
264
+ input.activeCase.startedAtMicroseconds;
259
265
  completeFinishedActiveCase(input, {
260
- result: createInconclusiveCaseResult(input.testCase, error, wallTimeMs),
266
+ result: createInconclusiveCaseResult(input.testCase, error, durationMicroseconds),
261
267
  runnerErrors: [],
262
- wallTimeMs
268
+ durationMicroseconds
263
269
  });
264
270
  }
265
271
  async function runCaseBodyUnderSupervision(input) {
272
+ const removeFatalHandler = input.dependencies.globalErrorObserver.onFatalError(function completeCrashedCases() {
273
+ completeActiveCasesAfterGlobalError(input.supervision, input.dependencies);
274
+ });
266
275
  try {
267
276
  const executedCase = await Promise.race([
268
277
  runCaseWithSoftTimeout(input),
@@ -272,16 +281,19 @@ async function runCaseBodyUnderSupervision(input) {
272
281
  return executedCase;
273
282
  }
274
283
  catch (error) {
275
- const wallTimeMs = input.dependencies.wallClock.currentTimestampInMilliseconds -
276
- input.activeCase.startedAtMilliseconds;
284
+ const durationMicroseconds = input.dependencies.wallClock.currentMonotonicMicroseconds -
285
+ input.activeCase.startedAtMicroseconds;
277
286
  const fallbackCase = {
278
- result: createInconclusiveCaseResult(input.testCase, error, wallTimeMs),
287
+ result: createInconclusiveCaseResult(input.testCase, error, durationMicroseconds),
279
288
  runnerErrors: [],
280
- wallTimeMs
289
+ durationMicroseconds
281
290
  };
282
291
  completeUnexpectedBodyError(input, error);
283
292
  return fallbackCase;
284
293
  }
294
+ finally {
295
+ removeFatalHandler();
296
+ }
285
297
  }
286
298
  function createCaseBodyInput(input, activeCase, timeoutMilliseconds) {
287
299
  return {