@overkill-dev/run 0.0.38 → 0.0.40

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 (119) hide show
  1. package/compare/serialized-value.d.ts +1 -1
  2. package/compare/serialized-value.d.ts.map +1 -1
  3. package/compare/serialized-value.js +4 -2
  4. package/compare/serialized-value.js.map +1 -1
  5. package/engine/assertion-recorder.js +12 -3
  6. package/engine/assertion-recorder.js.map +1 -1
  7. package/engine/async-control.d.ts +33 -0
  8. package/engine/async-control.d.ts.map +1 -0
  9. package/engine/async-control.js +153 -0
  10. package/engine/async-control.js.map +1 -0
  11. package/engine/async-leak-diagnostics.d.ts +20 -0
  12. package/engine/async-leak-diagnostics.d.ts.map +1 -0
  13. package/engine/async-leak-diagnostics.js +157 -0
  14. package/engine/async-leak-diagnostics.js.map +1 -0
  15. package/engine/case-execution.d.ts +1 -1
  16. package/engine/case-execution.d.ts.map +1 -1
  17. package/engine/case-execution.js +127 -65
  18. package/engine/case-execution.js.map +1 -1
  19. package/engine/engine.d.ts +2 -1
  20. package/engine/engine.d.ts.map +1 -1
  21. package/engine/engine.js +1 -0
  22. package/engine/engine.js.map +1 -1
  23. package/engine/execution-async-leak-policy.d.ts +24 -0
  24. package/engine/execution-async-leak-policy.d.ts.map +1 -0
  25. package/engine/execution-async-leak-policy.js +56 -0
  26. package/engine/execution-async-leak-policy.js.map +1 -0
  27. package/engine/execution-options.d.ts +26 -0
  28. package/engine/execution-options.d.ts.map +1 -0
  29. package/engine/execution-options.js +25 -0
  30. package/engine/execution-options.js.map +1 -0
  31. package/engine/execution-resource-tracked-cases.js +35 -0
  32. package/engine/execution-resource-tracked-cases.js.map +1 -0
  33. package/engine/execution-result.js +16 -0
  34. package/engine/execution-result.js.map +1 -1
  35. package/engine/execution-supervision.js +2 -2
  36. package/engine/execution-supervision.js.map +1 -1
  37. package/engine/execution.d.ts +7 -20
  38. package/engine/execution.d.ts.map +1 -1
  39. package/engine/execution.js +49 -85
  40. package/engine/execution.js.map +1 -1
  41. package/engine/node-assertion-error.js +47 -0
  42. package/engine/node-assertion-error.js.map +1 -0
  43. package/engine/run-result.d.ts +19 -1
  44. package/engine/run-result.d.ts.map +1 -1
  45. package/engine/run-result.js.map +1 -1
  46. package/engine/test-node.d.ts +28 -1
  47. package/engine/test-node.d.ts.map +1 -1
  48. package/engine/test-node.js +24 -2
  49. package/engine/test-node.js.map +1 -1
  50. package/engine/test-plan.js +1 -1
  51. package/engine/test-plan.js.map +1 -1
  52. package/engine/test-scope-lifecycle.js +63 -0
  53. package/engine/test-scope-lifecycle.js.map +1 -0
  54. package/engine/throwing-test-scope.js +27 -0
  55. package/engine/throwing-test-scope.js.map +1 -0
  56. package/package.json +10 -4
  57. package/packages/engine/engine.entry-point.js +11 -3
  58. package/packages/engine/engine.entry-point.js.map +1 -1
  59. package/packages/run/run.entry-point.d.ts +1 -1
  60. package/packages/run/run.entry-point.d.ts.map +1 -1
  61. package/readme.md +10 -4
  62. package/reporters/line-failure-rendering.js +1 -1
  63. package/reporters/line-failure-rendering.js.map +1 -1
  64. package/run/default-run-engine.d.ts.map +1 -1
  65. package/run/default-run-engine.js +6 -0
  66. package/run/default-run-engine.js.map +1 -1
  67. package/run/run-collected-resolution.js +59 -0
  68. package/run/run-collected-resolution.js.map +1 -0
  69. package/run/run-config-schema.d.ts +30 -10
  70. package/run/run-config-schema.d.ts.map +1 -1
  71. package/run/run-config-schema.js +19 -6
  72. package/run/run-config-schema.js.map +1 -1
  73. package/run/run-config.d.ts.map +1 -1
  74. package/run/run-config.js +24 -4
  75. package/run/run-config.js.map +1 -1
  76. package/run/run-facts.js +27 -14
  77. package/run/run-facts.js.map +1 -1
  78. package/run/run-isolated-command.js +63 -0
  79. package/run/run-isolated-command.js.map +1 -0
  80. package/run/run-list-renderer.js +1 -1
  81. package/run/run-list-renderer.js.map +1 -1
  82. package/run/run-local-resolution.js +62 -0
  83. package/run/run-local-resolution.js.map +1 -0
  84. package/run/run-orchestrator-dependencies.d.ts +18 -0
  85. package/run/run-orchestrator-dependencies.d.ts.map +1 -1
  86. package/run/run-orchestrator.d.ts.map +1 -1
  87. package/run/run-orchestrator.js +7 -0
  88. package/run/run-orchestrator.js.map +1 -1
  89. package/run/run-process-engine.js +15 -9
  90. package/run/run-process-engine.js.map +1 -1
  91. package/run/run-support.js +8 -1
  92. package/run/run-support.js.map +1 -1
  93. package/run/run-types.d.ts +23 -5
  94. package/run/run-types.d.ts.map +1 -1
  95. package/run/run-types.js.map +1 -1
  96. package/run/run.js +69 -154
  97. package/run/run.js.map +1 -1
  98. package/run/supervised-child.js +5 -0
  99. package/run/supervised-child.js.map +1 -1
  100. package/run/supervised-run.js.map +1 -1
  101. package/run/tinypool-node-compatibility.js +15 -0
  102. package/run/tinypool-node-compatibility.js.map +1 -0
  103. package/run/worker-pool-collection.js +96 -0
  104. package/run/worker-pool-collection.js.map +1 -0
  105. package/run/worker-pool-execution.js +342 -0
  106. package/run/worker-pool-execution.js.map +1 -0
  107. package/run/worker-pool-output.js +87 -0
  108. package/run/worker-pool-output.js.map +1 -0
  109. package/run/worker-pool-results.js +98 -0
  110. package/run/worker-pool-results.js.map +1 -0
  111. package/run/worker-pool-run.js +33 -0
  112. package/run/worker-pool-run.js.map +1 -0
  113. package/run/worker-pool-runtime.js +106 -0
  114. package/run/worker-pool-runtime.js.map +1 -0
  115. package/run/worker-pool-worker-plan.js +54 -0
  116. package/run/worker-pool-worker-plan.js.map +1 -0
  117. package/run/worker-pool-worker.js +95 -0
  118. package/run/worker-pool-worker.js.map +1 -0
  119. package/sbom.cdx.json +26 -9
@@ -0,0 +1,96 @@
1
+ import { MessageChannel as NodeMessageChannel } from 'node:worker_threads';
2
+ import { RunCollectionError } from "./run-errors.js";
3
+ import { createStoredRunValue } from "./supervised-run-state.js";
4
+ import { createPool } from "./worker-pool-runtime.js";
5
+ function portTransferList(port) {
6
+ return [port];
7
+ }
8
+ function recordCollectionOutput(message, runState) {
9
+ if (message.kind === 'output') {
10
+ runState.recordCapturedOutput(message.stream, Buffer.from(message.chunk), message.capturedAtMilliseconds);
11
+ }
12
+ }
13
+ function collectionError(error, runState) {
14
+ const [firstError] = runState.runnerErrors();
15
+ return new RunCollectionError(firstError?.message ?? 'Worker-pool collection failed.', { cause: firstError ?? error }, 'loader');
16
+ }
17
+ function isWorkerPoolCollection(value) {
18
+ return value !== null &&
19
+ typeof value === 'object' &&
20
+ Object.hasOwn(value, 'collectedPlan') &&
21
+ Object.hasOwn(value, 'runnerErrors');
22
+ }
23
+ function startCollectionTimeout(context) {
24
+ return context.dependencies.wallClock.setTimeout(function abortCollection() {
25
+ context.terminalFailure.write(true);
26
+ context.runState.recordRunnerError({
27
+ attributedTo: null,
28
+ cause: { reason: 'Worker-pool collection exceeded collection timeout.' },
29
+ message: 'Worker-pool collection exceeded collection timeout.',
30
+ subtype: 'crash'
31
+ });
32
+ context.controller.abort();
33
+ }, context.command.collectionTimeoutMilliseconds);
34
+ }
35
+ async function runCollectionTask(pool, command, port, controller) {
36
+ const collection = await pool.run({
37
+ command,
38
+ kind: 'collect',
39
+ port
40
+ }, {
41
+ name: 'runTask',
42
+ signal: controller.signal,
43
+ transferList: portTransferList(port)
44
+ });
45
+ if (!isWorkerPoolCollection(collection)) {
46
+ throw new RunCollectionError('Worker-pool collection failed.', { cause: collection }, 'loader');
47
+ }
48
+ return collection;
49
+ }
50
+ function observeCollectionOutput(port, runState) {
51
+ port.on('message', function receiveCollectionMessage(message) {
52
+ recordCollectionOutput(message, runState);
53
+ });
54
+ }
55
+ function createCollectionRuntime(command, dependencies, runState) {
56
+ const { port1, port2 } = new NodeMessageChannel();
57
+ const controller = new AbortController();
58
+ const terminalFailure = createStoredRunValue(false);
59
+ const timeout = startCollectionTimeout({ command, controller, dependencies, runState, terminalFailure });
60
+ observeCollectionOutput(port2, runState);
61
+ return {
62
+ controller,
63
+ pool: createPool({ workerCount: 1, workerLifecycle: 'fresh-worker-per-unit' }),
64
+ port1,
65
+ port2,
66
+ terminalFailure,
67
+ timeout
68
+ };
69
+ }
70
+ function collectionResult(collection, runState) {
71
+ return {
72
+ collectedPlan: collection.collectedPlan,
73
+ runnerErrors: [...runState.runnerErrors(), ...collection.runnerErrors]
74
+ };
75
+ }
76
+ function completeCollection(collection, runtime, runState) {
77
+ if (runtime.terminalFailure.read()) {
78
+ throw new RunCollectionError('Worker-pool collection failed.', { cause: null }, 'loader');
79
+ }
80
+ return collectionResult(collection, runState);
81
+ }
82
+ export async function collectInWorkerPool(command, dependencies, runState) {
83
+ const runtime = createCollectionRuntime(command, dependencies, runState);
84
+ try {
85
+ return completeCollection(await runCollectionTask(runtime.pool, command, runtime.port1, runtime.controller), runtime, runState);
86
+ }
87
+ catch (error) {
88
+ throw collectionError(error, runState);
89
+ }
90
+ finally {
91
+ dependencies.wallClock.clearTimeout(runtime.timeout);
92
+ runtime.port2.close();
93
+ await runtime.pool.destroy();
94
+ }
95
+ }
96
+ //# sourceMappingURL=worker-pool-collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool-collection.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,342 @@
1
+ import { MessageChannel as NodeMessageChannel } from 'node:worker_threads';
2
+ import { caseIdentityKey } from "../engine/identity.js";
3
+ import { collectedRunCaseEntries } from "./collected-run-plan.js";
4
+ import { applyEvent } from "./supervised-run-runtime.js";
5
+ import { createStoredRunValue, createSupervisedRunState } from "./supervised-run-state.js";
6
+ import { crashError, findResourceBudgetBreach, resourceExhaustionError } from "./supervised-run-resource-policy.js";
7
+ import { runStartTimeFromMilliseconds } from "./worker-pool-runtime.js";
8
+ const maximumCrashCount = 3;
9
+ function portTransferList(port) {
10
+ return [port];
11
+ }
12
+ function casesByKey(assignedCases) {
13
+ return new Map(assignedCases.map(function toCaseEntry(id) {
14
+ return [caseIdentityKey(id), { capture: null, id }];
15
+ }));
16
+ }
17
+ async function recordReporterEventErrors(event, runtime) {
18
+ const errors = await runtime.reporterDelivery.reportEvent(event);
19
+ if (errors.length > 0) {
20
+ runtime.runState.recordRunnerErrors(errors);
21
+ }
22
+ }
23
+ function clearTaskTimeout(taskRun, dependencies) {
24
+ const timeout = taskRun.timeout.read();
25
+ if (timeout !== null) {
26
+ dependencies.wallClock.clearTimeout(timeout);
27
+ taskRun.timeout.write(null);
28
+ }
29
+ }
30
+ function startTaskTimeout(taskRun, runtime) {
31
+ if (taskRun.timeout.read() !== null) {
32
+ return;
33
+ }
34
+ taskRun.timeout.write(runtime.dependencies.wallClock.setTimeout(function abortTimedOutWorker() {
35
+ taskRun.endedByParent.write(true);
36
+ taskRun.requeuePendingCases.write(true);
37
+ taskRun.state.recordRunnerError(crashError(taskRun.state, 'Worker-pool file task exceeded hard timeout.'));
38
+ taskRun.state.recordTerminalActiveCases('crashed');
39
+ taskRun.controller.abort();
40
+ }, runtime.resolvedRun.facts.execution.timeoutPolicy.hardMilliseconds));
41
+ }
42
+ function handleWorkerEvent(event, taskRun, runtime) {
43
+ if (event.kind === 'test-start') {
44
+ taskRun.startedCases.add(caseIdentityKey(event.case));
45
+ startTaskTimeout(taskRun, runtime);
46
+ }
47
+ const reportedEvent = event.kind === 'test-end'
48
+ ? {
49
+ ...event,
50
+ artifacts: [
51
+ ...event.artifacts,
52
+ ...taskRun.state.caseArtifacts(event.case)
53
+ ]
54
+ }
55
+ : event;
56
+ applyEvent(reportedEvent, taskRun.state, casesByKey(taskRun.unit.assignedCases));
57
+ if (reportedEvent.kind === 'test-end' && taskRun.state.activeCases.size === 0) {
58
+ clearTaskTimeout(taskRun, runtime.dependencies);
59
+ }
60
+ runtime.reporterEvents.add(recordReporterEventErrors(reportedEvent, runtime));
61
+ }
62
+ function handleWorkerMessage(message, taskRun, runtime) {
63
+ if (message.kind === 'output') {
64
+ taskRun.state.recordCapturedOutput(message.stream, Buffer.from(message.chunk), message.capturedAtMilliseconds);
65
+ }
66
+ else {
67
+ handleWorkerEvent(message.event, taskRun, runtime);
68
+ }
69
+ }
70
+ function observeTaskMessages(taskRun, runtime) {
71
+ const { port1, port2 } = new NodeMessageChannel();
72
+ port2.on('message', function receiveWorkerMessage(message) {
73
+ handleWorkerMessage(message, taskRun, runtime);
74
+ });
75
+ return {
76
+ close() {
77
+ port2.close();
78
+ },
79
+ port: port1
80
+ };
81
+ }
82
+ function workerPoolEngine(runtime) {
83
+ if (runtime.resolvedRun.engine.kind === 'instance') {
84
+ throw new Error('Instance engines are not supported with worker-pool execution. Use a module engine.');
85
+ }
86
+ return runtime.resolvedRun.engine;
87
+ }
88
+ function createRunCommand(runtime, unit) {
89
+ return {
90
+ collectionTimeoutMilliseconds: runtime.resolvedRun.facts.execution.timeoutPolicy.collectionMilliseconds,
91
+ cwd: runtime.resolvedRun.cwd,
92
+ engine: workerPoolEngine(runtime),
93
+ hardTimeoutMilliseconds: runtime.resolvedRun.facts.execution.timeoutPolicy.hardMilliseconds,
94
+ paths: [unit.file],
95
+ resourceBudgets: runtime.resolvedRun.facts.execution.resourceUsagePolicy.budgets,
96
+ resourceUsageSamplingIntervalMilliseconds: runtime
97
+ .resolvedRun
98
+ .facts
99
+ .execution
100
+ .resourceUsagePolicy
101
+ .samplingIntervalMilliseconds,
102
+ scheduling: runtime.resolvedRun.facts.execution.scheduling,
103
+ testFamily: runtime.resolvedRun.facts.execution.testFamily,
104
+ timeoutMilliseconds: runtime.resolvedRun.facts.execution.timeoutPolicy.softMilliseconds
105
+ };
106
+ }
107
+ function isWorkerPoolRunOutput(value) {
108
+ return value !== null &&
109
+ typeof value === 'object' &&
110
+ Object.hasOwn(value, 'result');
111
+ }
112
+ async function runWorkerTask(taskRun, runtime, channel, startedAtMilliseconds) {
113
+ const output = await runtime.pool.run({
114
+ assignedCases: taskRun.unit.assignedCases,
115
+ command: createRunCommand(runtime, taskRun.unit),
116
+ kind: 'run',
117
+ port: channel.port,
118
+ startedAtMilliseconds
119
+ }, {
120
+ name: 'runTask',
121
+ signal: taskRun.controller.signal,
122
+ transferList: portTransferList(channel.port)
123
+ });
124
+ if (!isWorkerPoolRunOutput(output)) {
125
+ throw new Error('Worker-pool task returned an invalid result.');
126
+ }
127
+ return output;
128
+ }
129
+ async function runFileUnit(taskRun, runtime, startedAtMilliseconds) {
130
+ const channel = observeTaskMessages(taskRun, runtime);
131
+ try {
132
+ return await runWorkerTask(taskRun, runtime, channel, startedAtMilliseconds);
133
+ }
134
+ finally {
135
+ channel.close();
136
+ }
137
+ }
138
+ function createTaskRun(unit) {
139
+ return {
140
+ controller: new AbortController(),
141
+ endedByParent: createStoredRunValue(false),
142
+ requeuePendingCases: createStoredRunValue(false),
143
+ state: createSupervisedRunState(),
144
+ startedCases: new Set(),
145
+ timeout: createStoredRunValue(null),
146
+ unit
147
+ };
148
+ }
149
+ function pendingCases(taskRun) {
150
+ return taskRun.unit.assignedCases.filter(function caseHasNotStarted(testCase) {
151
+ return !taskRun.startedCases.has(caseIdentityKey(testCase));
152
+ });
153
+ }
154
+ function pendingFileUnit(taskRun) {
155
+ const cases = pendingCases(taskRun);
156
+ return cases.length === 0
157
+ ? null
158
+ : {
159
+ assignedCases: cases,
160
+ file: taskRun.unit.file
161
+ };
162
+ }
163
+ function crashReason(error) {
164
+ return error instanceof Error ? error.message : String(error);
165
+ }
166
+ function recordRunCrash(runtime, message, cause) {
167
+ runtime.runState.recordRunnerError({
168
+ attributedTo: null,
169
+ cause,
170
+ message,
171
+ subtype: 'crash'
172
+ });
173
+ }
174
+ function markActiveTasksCrashed(runtime) {
175
+ for (const activeTask of runtime.activeTasks) {
176
+ activeTask.endedByParent.write(true);
177
+ activeTask.requeuePendingCases.write(false);
178
+ activeTask.state.recordRunnerError(crashError(activeTask.state, 'Worker-pool execution stopped.'));
179
+ activeTask.state.recordTerminalActiveCases('crashed');
180
+ clearTaskTimeout(activeTask, runtime.dependencies);
181
+ activeTask.controller.abort();
182
+ }
183
+ }
184
+ function stopAfterCrashLimit(runtime, queue, crashCount) {
185
+ runtime.terminalFailure.write(true);
186
+ recordRunCrash(runtime, 'Worker-pool stopped after 3 worker crashes.', { crashCount });
187
+ queue.clear();
188
+ markActiveTasksCrashed(runtime);
189
+ }
190
+ function recordWorkerCrash(runtime, crashCount, queue) {
191
+ const nextCrashCount = crashCount.read() + 1;
192
+ crashCount.write(nextCrashCount);
193
+ if (nextCrashCount >= maximumCrashCount) {
194
+ stopAfterCrashLimit(runtime, queue, nextCrashCount);
195
+ return true;
196
+ }
197
+ return false;
198
+ }
199
+ function handleParentEndedFailure(taskRun, context) {
200
+ if (!taskRun.requeuePendingCases.read()) {
201
+ return null;
202
+ }
203
+ return recordWorkerCrash(context.runtime, context.crashCount, context.queue) ? null : pendingFileUnit(taskRun);
204
+ }
205
+ function handleTaskFailure(error, taskRun, context) {
206
+ if (taskRun.endedByParent.read()) {
207
+ return handleParentEndedFailure(taskRun, context);
208
+ }
209
+ taskRun.state.recordRunnerError(crashError(taskRun.state, crashReason(error)));
210
+ taskRun.state.recordTerminalActiveCases('crashed');
211
+ return recordWorkerCrash(context.runtime, context.crashCount, context.queue) ? null : pendingFileUnit(taskRun);
212
+ }
213
+ function createUnitQueue(units) {
214
+ const pendingUnits = Array.from(units);
215
+ let nextIndex = 0;
216
+ return {
217
+ clear() {
218
+ pendingUnits.length = 0;
219
+ nextIndex = 0;
220
+ },
221
+ pull() {
222
+ const unit = pendingUnits[nextIndex] ?? null;
223
+ nextIndex += unit === null ? 0 : 1;
224
+ return unit;
225
+ },
226
+ requeue(unit) {
227
+ pendingUnits.push(unit);
228
+ }
229
+ };
230
+ }
231
+ async function executeTaskRun(taskRun, context) {
232
+ context.runtime.activeTasks.add(taskRun);
233
+ try {
234
+ const output = await runFileUnit(taskRun, context.runtime, context.startedAtMilliseconds);
235
+ context.runtime.taskResults.push(output.result);
236
+ }
237
+ catch (error) {
238
+ const unit = handleTaskFailure(error, taskRun, context);
239
+ if (unit !== null) {
240
+ context.queue.requeue(unit);
241
+ }
242
+ }
243
+ finally {
244
+ clearTaskTimeout(taskRun, context.runtime.dependencies);
245
+ context.runtime.activeTasks.delete(taskRun);
246
+ }
247
+ }
248
+ async function runWorkerLoop(context) {
249
+ while (!context.runtime.terminalFailure.read()) {
250
+ const unit = context.queue.pull();
251
+ if (unit === null) {
252
+ return;
253
+ }
254
+ const taskRun = createTaskRun(unit);
255
+ await executeTaskRun(taskRun, context);
256
+ context.completedTaskRuns.push(taskRun);
257
+ }
258
+ }
259
+ function workerLoopIndexes(runtime) {
260
+ return Array.from({ length: runtime.pool.options.maxThreads }, function toWorkerIndex(_value, index) {
261
+ return index;
262
+ });
263
+ }
264
+ export async function executeWorkerPoolUnits(runtime, units, startedAtMilliseconds) {
265
+ const queue = createUnitQueue(units);
266
+ const completedTaskRuns = [];
267
+ const crashCount = createStoredRunValue(0);
268
+ await Promise.all(workerLoopIndexes(runtime).map(async function runLoop() {
269
+ await runWorkerLoop({
270
+ completedTaskRuns,
271
+ crashCount,
272
+ queue,
273
+ runtime,
274
+ startedAtMilliseconds
275
+ });
276
+ }));
277
+ return completedTaskRuns;
278
+ }
279
+ function poolResourceBudgets(runtime) {
280
+ const { budgets } = runtime.resolvedRun.facts.execution.resourceUsagePolicy;
281
+ return {
282
+ activeResourceCount: null,
283
+ javaScriptEngineHeapBytes: null,
284
+ residentSetBytes: budgets.residentSetBytes,
285
+ residentSetGrowthBytesPerSecond: budgets.residentSetGrowthBytesPerSecond
286
+ };
287
+ }
288
+ function createActiveCaseState(runtime) {
289
+ const activeState = createSupervisedRunState();
290
+ for (const taskRun of runtime.activeTasks) {
291
+ for (const [key, activeCase] of taskRun.state.activeCases) {
292
+ activeState.addActiveCase(key, activeCase);
293
+ }
294
+ }
295
+ return activeState;
296
+ }
297
+ function stopTaskForResourceExhaustion(taskRun, runtime) {
298
+ taskRun.endedByParent.write(true);
299
+ taskRun.requeuePendingCases.write(false);
300
+ taskRun.state.recordTerminalActiveCases('resource-exhausted');
301
+ clearTaskTimeout(taskRun, runtime.dependencies);
302
+ taskRun.controller.abort();
303
+ }
304
+ function stopActiveTasksForResourceExhaustion(runtime) {
305
+ for (const taskRun of runtime.activeTasks) {
306
+ stopTaskForResourceExhaustion(taskRun, runtime);
307
+ }
308
+ }
309
+ function recordPoolResourceBreach(runtime, sample) {
310
+ const breach = findResourceBudgetBreach(poolResourceBudgets(runtime), sample, runtime.previousPoolSample.read());
311
+ runtime.previousPoolSample.write(sample);
312
+ if (breach !== null) {
313
+ runtime.terminalFailure.write(true);
314
+ const activeState = createActiveCaseState(runtime);
315
+ const error = resourceExhaustionError(breach, activeState);
316
+ runtime.runState.recordRunnerError(error);
317
+ runtime.reporterEvents.add(recordReporterEventErrors({ error, kind: 'runner-error' }, runtime));
318
+ stopActiveTasksForResourceExhaustion(runtime);
319
+ }
320
+ }
321
+ export function startPoolResourceTracking(runtime) {
322
+ runtime.poolResourceUsageTracker?.start(function recordPoolSample(sample) {
323
+ if (!runtime.terminalFailure.read()) {
324
+ recordPoolResourceBreach(runtime, sample);
325
+ }
326
+ });
327
+ }
328
+ export async function reportRunStart(runtime, startedAtMilliseconds) {
329
+ if (collectedRunCaseEntries(runtime.collectedPlan).length === 0) {
330
+ return;
331
+ }
332
+ await recordReporterEventErrors({
333
+ facts: runtime.resolvedRun.facts,
334
+ kind: 'run-start',
335
+ root: {
336
+ annotations: runtime.collectedPlan.root.annotations,
337
+ title: runtime.collectedPlan.root.title
338
+ },
339
+ startedAt: runStartTimeFromMilliseconds(startedAtMilliseconds)
340
+ }, runtime);
341
+ }
342
+ //# sourceMappingURL=worker-pool-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool-execution.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { defineReporter } from "../packages/engine/engine.entry-point.js";
2
+ function ignoredLine() {
3
+ return undefined;
4
+ }
5
+ function outputBuffer(chunk) {
6
+ return Buffer.from(chunk);
7
+ }
8
+ function selectedStream(streamName) {
9
+ return streamName === 'stdout' ? process.stdout : process.stderr;
10
+ }
11
+ function replaceStreamWrite(streamName, write) {
12
+ const stream = selectedStream(streamName);
13
+ const originalWrite = stream.write.bind(stream);
14
+ stream.write = write;
15
+ return function restoreStream() {
16
+ stream.write = originalWrite;
17
+ };
18
+ }
19
+ function invokeWriteCallbacks(encodingOrCallback, callback) {
20
+ if (typeof encodingOrCallback === 'function') {
21
+ encodingOrCallback(null);
22
+ }
23
+ callback?.(null);
24
+ }
25
+ function captureStream(streamName, task, wallClock) {
26
+ function writeCapturedOutput(chunk, encodingOrCallback, callback) {
27
+ const output = {
28
+ capturedAtMilliseconds: wallClock.currentTimestampInMilliseconds,
29
+ chunk: outputBuffer(chunk),
30
+ kind: 'output',
31
+ stream: streamName
32
+ };
33
+ task.port.postMessage(output, []);
34
+ invokeWriteCallbacks(encodingOrCallback, callback);
35
+ return true;
36
+ }
37
+ return replaceStreamWrite(streamName, writeCapturedOutput);
38
+ }
39
+ export function captureOutput(task, wallClock) {
40
+ const restoreStdout = captureStream('stdout', task, wallClock);
41
+ const restoreStderr = captureStream('stderr', task, wallClock);
42
+ return {
43
+ restore() {
44
+ restoreStdout();
45
+ restoreStderr();
46
+ }
47
+ };
48
+ }
49
+ function suppressStream(streamName) {
50
+ function writeSuppressedOutput(_chunk, encodingOrCallback, callback) {
51
+ invokeWriteCallbacks(encodingOrCallback, callback);
52
+ return true;
53
+ }
54
+ return replaceStreamWrite(streamName, writeSuppressedOutput);
55
+ }
56
+ export function suppressOutput() {
57
+ const restoreStdout = suppressStream('stdout');
58
+ const restoreStderr = suppressStream('stderr');
59
+ return {
60
+ restore() {
61
+ restoreStdout();
62
+ restoreStderr();
63
+ }
64
+ };
65
+ }
66
+ export function createWorkerPoolReporter(task) {
67
+ return defineReporter(function createWorkerPoolRuntimeReporter() {
68
+ return {
69
+ dispose: null,
70
+ kind: 'real-time',
71
+ name: 'worker-pool-thread',
72
+ onEvent(event) {
73
+ if (event.kind !== 'run-start' && event.kind !== 'run-end') {
74
+ const message = { event, kind: 'event' };
75
+ task.port.postMessage(message, []);
76
+ }
77
+ },
78
+ onFinish: null,
79
+ sinks: [{ kind: 'memory' }]
80
+ };
81
+ });
82
+ }
83
+ export const silentOutputSinks = {
84
+ stderr: { writeLine: ignoredLine },
85
+ stdout: { writeLine: ignoredLine }
86
+ };
87
+ //# sourceMappingURL=worker-pool-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool-output.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-output.ts"],"names":[],"mappings":"AACA,OAAO,EACH,cAAc,EAEjB,MAAM,0CAA0C,CAAC;AAiBlD,SAAS,WAAW;IAChB,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,UAAgC;IACpD,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACrE,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAgC,EAAE,KAAkB;IAC5E,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAErB,OAAO,SAAS,aAAa;QACzB,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC;IACjC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,oBAAoB,CACzB,kBAAuD,EACvD,QAAmC;IAEnC,IAAI,OAAO,kBAAkB,KAAK,UAAU,EAAE,CAAC;QAC3C,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,aAAa,CAClB,UAAgC,EAChC,IAAoB,EACpB,SAA6C;IAQ7C,SAAS,mBAAmB,CACxB,KAAiB,EACjB,kBAA4C,EAC5C,QAAwB;QAExB,MAAM,MAAM,GAAsB;YAC9B,sBAAsB,EAAE,SAAS,CAAC,8BAA8B;YAChE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;YAC1B,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,UAAU;SACrB,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClC,oBAAoB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,kBAAkB,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,aAAa,CACzB,IAAoB,EACpB,SAA6C;IAE7C,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAE/D,OAAO;QACH,OAAO;YACH,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;QACpB,CAAC;KACJ,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,UAAgC;IAOpD,SAAS,qBAAqB,CAC1B,MAAkB,EAClB,kBAA4C,EAC5C,QAAwB;QAExB,oBAAoB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,kBAAkB,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,cAAc;IAC1B,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE/C,OAAO;QACH,OAAO;YACH,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;QACpB,CAAC;KACJ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAoB;IACzD,OAAO,cAAc,CAAC,SAAS,+BAA+B;QAC1D,OAAO;YACH,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,oBAAoB;YAC1B,OAAO,CAAC,KAAK;gBACT,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACzD,MAAM,OAAO,GAAsB,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBAC5D,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACvC,CAAC;YACL,CAAC;YACD,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAE;SAChC,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,MAAM,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;IAClC,MAAM,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;CACrC,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { caseIdentityKey } from "../engine/identity.js";
2
+ import { collectedRunCaseEntries, createRunResultFromCollectedPlan } from "./collected-run-plan.js";
3
+ import { createReporterDelivery } from "./supervised-run-runtime.js";
4
+ import { workerPoolCollectedPlan } from "./worker-pool-runtime.js";
5
+ function taskArtifacts(runtime) {
6
+ return Array.from(runtime.activeTasks).flatMap(function toArtifacts(taskRun) {
7
+ return taskRun.state.artifacts();
8
+ });
9
+ }
10
+ function allTaskArtifacts(completedTaskRuns) {
11
+ return completedTaskRuns.flatMap(function toArtifacts(taskRun) {
12
+ return taskRun.state.artifacts();
13
+ });
14
+ }
15
+ function allTaskErrors(runtime, completedTaskRuns) {
16
+ return [
17
+ ...runtime.collectionRunnerErrors,
18
+ ...runtime.runState.runnerErrors(),
19
+ ...completedTaskRuns.flatMap(function toErrors(taskRun) {
20
+ return taskRun.state.runnerErrors();
21
+ }),
22
+ ...runtime.taskResults.flatMap(function toErrors(result) {
23
+ return result.runnerErrors;
24
+ })
25
+ ];
26
+ }
27
+ function orderedPerTest(collectedPlan, perTest) {
28
+ const results = new Map(perTest.map(function toEntry(result) {
29
+ return [caseIdentityKey(result.id), result];
30
+ }));
31
+ return collectedRunCaseEntries(collectedPlan).flatMap(function toResult(entry) {
32
+ const result = results.get(caseIdentityKey(entry.id));
33
+ return result === undefined ? [] : [result];
34
+ });
35
+ }
36
+ function resultWithArtifacts(result, artifacts) {
37
+ if (artifacts.length === 0) {
38
+ return result;
39
+ }
40
+ return {
41
+ ...result,
42
+ artifacts: [...result.artifacts, ...artifacts]
43
+ };
44
+ }
45
+ function finishPoolResourceUsage(runtime) {
46
+ return runtime.poolResourceUsageTracker?.finish() ?? null;
47
+ }
48
+ async function reportFinalResult(result, runtime) {
49
+ const runEndErrors = await runtime.reporterDelivery.reportEvent({ kind: 'run-end', result });
50
+ const resultForFinalReporting = {
51
+ ...result,
52
+ runnerErrors: [...result.runnerErrors, ...runEndErrors]
53
+ };
54
+ const finalReporterErrors = await runtime.reporterDelivery.reportResult(resultForFinalReporting);
55
+ const disposeErrors = await runtime.reporterDelivery.disposeReporters();
56
+ return {
57
+ ...resultForFinalReporting,
58
+ runnerErrors: [...resultForFinalReporting.runnerErrors, ...finalReporterErrors, ...disposeErrors]
59
+ };
60
+ }
61
+ export async function finishWorkerPoolRun(runtime, completedTaskRuns, startedAtMilliseconds) {
62
+ await runtime.reporterEvents.wait();
63
+ const perTest = orderedPerTest(runtime.collectedPlan, [
64
+ ...completedTaskRuns.flatMap(function toPerTest(taskRun) {
65
+ return taskRun.state.perTestResults();
66
+ }),
67
+ ...runtime.taskResults.flatMap(function toPerTest(result) {
68
+ return result.perTest;
69
+ })
70
+ ]);
71
+ const result = resultWithArtifacts(createRunResultFromCollectedPlan(runtime.collectedPlan, perTest, allTaskErrors(runtime, completedTaskRuns), {
72
+ resourceUsage: finishPoolResourceUsage(runtime),
73
+ startedAtMs: startedAtMilliseconds,
74
+ wallClock: runtime.dependencies.wallClock
75
+ }), [...runtime.runState.artifacts(), ...allTaskArtifacts(completedTaskRuns), ...taskArtifacts(runtime)]);
76
+ return await reportFinalResult(result, runtime);
77
+ }
78
+ export async function createEmptyWorkerPoolResult(resolvedRun, dependencies, collectionRunState) {
79
+ const reporterDelivery = await createReporterDelivery(resolvedRun, dependencies);
80
+ const startedAtMilliseconds = dependencies.wallClock.currentTimestampInMilliseconds;
81
+ const result = resultWithArtifacts(createRunResultFromCollectedPlan(workerPoolCollectedPlan(resolvedRun), [], [...resolvedRun.collectionRunnerErrors, ...collectionRunState.runnerErrors()], {
82
+ resourceUsage: null,
83
+ startedAtMs: startedAtMilliseconds,
84
+ wallClock: dependencies.wallClock
85
+ }), collectionRunState.artifacts());
86
+ const runEndErrors = await reporterDelivery.reportEvent({ kind: 'run-end', result });
87
+ const resultForFinalReporting = {
88
+ ...result,
89
+ runnerErrors: [...result.runnerErrors, ...runEndErrors]
90
+ };
91
+ const finalReporterErrors = await reporterDelivery.reportResult(resultForFinalReporting);
92
+ const disposeErrors = await reporterDelivery.disposeReporters();
93
+ return {
94
+ ...resultForFinalReporting,
95
+ runnerErrors: [...resultForFinalReporting.runnerErrors, ...finalReporterErrors, ...disposeErrors]
96
+ };
97
+ }
98
+ //# sourceMappingURL=worker-pool-results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool-results.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-results.ts"],"names":[],"mappings":"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"}