@tonalisk-labs/kit 1.0.1 → 1.0.6

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 (79) hide show
  1. package/dist/testing/src/config-coverage.d.ts.map +1 -1
  2. package/dist/testing/src/config-coverage.js +3 -2
  3. package/dist/testing/src/config-coverage.js.map +1 -1
  4. package/dist/testing/src/fixtures.d.ts +9 -3
  5. package/dist/testing/src/fixtures.d.ts.map +1 -1
  6. package/dist/testing/src/fixtures.js +98 -42
  7. package/dist/testing/src/fixtures.js.map +1 -1
  8. package/dist/testing/src/floors/node.js +11 -3
  9. package/dist/testing/src/floors/node.js.map +1 -1
  10. package/dist/testing/src/stack/browsers.d.ts +13 -3
  11. package/dist/testing/src/stack/browsers.d.ts.map +1 -1
  12. package/dist/testing/src/stack/browsers.js +117 -14
  13. package/dist/testing/src/stack/browsers.js.map +1 -1
  14. package/dist/testing/src/stack/containers.d.ts +6 -2
  15. package/dist/testing/src/stack/containers.d.ts.map +1 -1
  16. package/dist/testing/src/stack/containers.js +8 -1
  17. package/dist/testing/src/stack/containers.js.map +1 -1
  18. package/dist/testing/src/stack/control.d.ts +18 -3
  19. package/dist/testing/src/stack/control.d.ts.map +1 -1
  20. package/dist/testing/src/stack/control.js +50 -10
  21. package/dist/testing/src/stack/control.js.map +1 -1
  22. package/dist/testing/src/stack/gate-member.d.ts +10 -0
  23. package/dist/testing/src/stack/gate-member.d.ts.map +1 -1
  24. package/dist/testing/src/stack/gate-member.js +68 -7
  25. package/dist/testing/src/stack/gate-member.js.map +1 -1
  26. package/dist/testing/src/stack/gate-server.d.ts +37 -4
  27. package/dist/testing/src/stack/gate-server.d.ts.map +1 -1
  28. package/dist/testing/src/stack/gate-server.js +124 -12
  29. package/dist/testing/src/stack/gate-server.js.map +1 -1
  30. package/dist/testing/src/stack/hold.d.ts +24 -3
  31. package/dist/testing/src/stack/hold.d.ts.map +1 -1
  32. package/dist/testing/src/stack/hold.js +136 -11
  33. package/dist/testing/src/stack/hold.js.map +1 -1
  34. package/dist/testing/src/stack/host.d.ts.map +1 -1
  35. package/dist/testing/src/stack/host.js +26 -6
  36. package/dist/testing/src/stack/host.js.map +1 -1
  37. package/dist/testing/src/stack/lock.d.ts +15 -4
  38. package/dist/testing/src/stack/lock.d.ts.map +1 -1
  39. package/dist/testing/src/stack/lock.js +47 -18
  40. package/dist/testing/src/stack/lock.js.map +1 -1
  41. package/dist/testing/src/stack/preview-child.js +14 -3
  42. package/dist/testing/src/stack/preview-child.js.map +1 -1
  43. package/dist/testing/src/stack/runtime-apple.d.ts.map +1 -1
  44. package/dist/testing/src/stack/runtime-apple.js +16 -0
  45. package/dist/testing/src/stack/runtime-apple.js.map +1 -1
  46. package/dist/testing/src/stack/runtime-docker.d.ts +2 -1
  47. package/dist/testing/src/stack/runtime-docker.d.ts.map +1 -1
  48. package/dist/testing/src/stack/runtime-docker.js +29 -3
  49. package/dist/testing/src/stack/runtime-docker.js.map +1 -1
  50. package/dist/testing/src/stack/runtime.d.ts +10 -0
  51. package/dist/testing/src/stack/runtime.d.ts.map +1 -1
  52. package/dist/testing/src/stack/runtime.js +1 -0
  53. package/dist/testing/src/stack/runtime.js.map +1 -1
  54. package/dist/testing/src/stack/socks.d.ts +25 -0
  55. package/dist/testing/src/stack/socks.d.ts.map +1 -0
  56. package/dist/testing/src/stack/socks.js +195 -0
  57. package/dist/testing/src/stack/socks.js.map +1 -0
  58. package/dist/testing/src/stack/stall.d.ts +36 -0
  59. package/dist/testing/src/stack/stall.d.ts.map +1 -0
  60. package/dist/testing/src/stack/stall.js +93 -0
  61. package/dist/testing/src/stack/stall.js.map +1 -0
  62. package/package.json +4 -4
  63. package/testing/src/config-coverage.ts +3 -2
  64. package/testing/src/fixtures.ts +277 -197
  65. package/testing/src/floors/node.ts +19 -3
  66. package/testing/src/stack/browsers.ts +129 -15
  67. package/testing/src/stack/containers.ts +14 -2
  68. package/testing/src/stack/control.ts +62 -11
  69. package/testing/src/stack/gate-member.ts +90 -8
  70. package/testing/src/stack/gate-server.ts +166 -21
  71. package/testing/src/stack/hold.ts +163 -11
  72. package/testing/src/stack/host.ts +32 -9
  73. package/testing/src/stack/lock.ts +61 -21
  74. package/testing/src/stack/preview-child.ts +21 -4
  75. package/testing/src/stack/runtime-apple.ts +20 -1
  76. package/testing/src/stack/runtime-docker.ts +47 -3
  77. package/testing/src/stack/runtime.ts +11 -0
  78. package/testing/src/stack/socks.ts +233 -0
  79. package/testing/src/stack/stall.ts +145 -0
@@ -4,6 +4,8 @@ import { spawn } from 'node:child_process';
4
4
  import { once } from 'node:events';
5
5
  import { createServer } from 'node:http';
6
6
  import { availableParallelism } from 'node:os';
7
+ import { DEADLINE_HEADER, described, HOLD_ID_HEADER, HOLDER_HEADER } from './hold.js';
8
+ import { STILLNESS, watchOf } from './stall.js';
7
9
  /** The fixed local port the machine's one CPU gate listens on: every run finds it there. */
8
10
  export const GATE_PORT = 47_391;
9
11
  /** The header the gate answers a join with, so a run never joins some other server. */
@@ -18,14 +20,89 @@ export const LAUNCH = 'launch';
18
20
  export const SLOTS = availableParallelism();
19
21
  /** The last segment of a turn's path that asks for every slot: a measurement load would skew. */
20
22
  export const WHOLE = 'whole';
23
+ /** Every hold this process serves, so a wait past its bound can name who holds and who waits. */
24
+ const holdings = new Set();
25
+ /** Each hold's way to move its deadline, by the id its request gave. */
26
+ const renewers = new Map();
27
+ /** A deadline as given: epoch milliseconds, or none. */
28
+ const deadlineIn = (given) => {
29
+ const value = Number(given);
30
+ return typeof given === 'string' && Number.isFinite(value) && value > 0 ? value : undefined;
31
+ };
32
+ /** The deadline a request gives its holder's test, or none. */
33
+ export const deadlineOf = (incoming) => deadlineIn(incoming.headers[DEADLINE_HEADER]);
34
+ /** The id a hold's request gives itself, or none. */
35
+ export const holdIdOf = (incoming) => {
36
+ const id = incoming.headers[HOLD_ID_HEADER];
37
+ return typeof id === 'string' && id !== '' ? id : undefined;
38
+ };
39
+ /** A hold's id as openHold makes it, a random UUID: nothing else names a hold. */
40
+ const HOLD_ID = /^[\da-f]{8}-[\da-f]{4}-4[\da-f]{3}-[89ab][\da-f]{3}-[\da-f]{12}$/u;
41
+ /** Moves the deadline of the hold `id` names to `given`, epoch milliseconds or none at all, as
42
+ * its test's timeout moved: 204, or 404 for a hold this process doesn't serve. A request names
43
+ * only an entry of the table: an id of another shape is looked up nowhere. */
44
+ export const answerDeadline = (outgoing, id, given) => {
45
+ const renew = HOLD_ID.test(id) && renewers.has(id) ? renewers.get(id) : undefined;
46
+ if (typeof renew !== 'function') {
47
+ outgoing.writeHead(404).end('no such hold here');
48
+ return;
49
+ }
50
+ renew(deadlineIn(given));
51
+ outgoing.writeHead(204).end();
52
+ };
53
+ /** The holder a request names, decoded, or as sent where it isn't URI-encoded; or that it named
54
+ * none. */
55
+ export const holderOf = (incoming) => {
56
+ const named = incoming.headers[HOLDER_HEADER];
57
+ if (typeof named !== 'string' || named === '') {
58
+ return 'an unnamed holder';
59
+ }
60
+ try {
61
+ return decodeURIComponent(named);
62
+ }
63
+ catch {
64
+ return named;
65
+ }
66
+ };
67
+ /** This process's holdings, each named as GET /holders gives it: what, by whom, for how long. */
68
+ export const holdingsNamed = () => {
69
+ const now = Date.now();
70
+ return holdings.size === 0
71
+ ? 'it records no holder or waiter'
72
+ : [...holdings].map((holding) => described(holding, now)).join('; ');
73
+ };
74
+ /** Answers a GET /holders with this process's holdings, as JSON. */
75
+ export const answerHolders = (outgoing) => {
76
+ outgoing
77
+ .writeHead(200, { 'content-type': 'application/json' })
78
+ .end(JSON.stringify([...holdings]));
79
+ };
21
80
  /** A hold (a stack lock, a CPU turn) lasts as long as its request stays open: granted with the
22
81
  * response head, given back when the caller closes it, however its worker ends. */
23
- export const holdOpen = (outgoing, take, give) => {
82
+ export const holdOpen = (outgoing, served) => {
83
+ const { take, give, what, who, deadline, watch, id } = served;
24
84
  const gone = new AbortController();
25
85
  const granted = { now: false };
86
+ const holding = { what, who, deadline, since: Date.now(), held: false };
87
+ holdings.add(holding);
88
+ if (id !== undefined) {
89
+ renewers.set(id, (moved) => {
90
+ holding.deadline = moved;
91
+ if (granted.held !== undefined) {
92
+ granted.held.renew(moved);
93
+ }
94
+ });
95
+ }
26
96
  outgoing.once('close', () => {
97
+ holdings.delete(holding);
98
+ if (id !== undefined) {
99
+ renewers.delete(id);
100
+ }
27
101
  gone.abort();
28
102
  if (granted.now) {
103
+ if (granted.held !== undefined) {
104
+ granted.held.release();
105
+ }
29
106
  give();
30
107
  }
31
108
  });
@@ -37,10 +114,15 @@ export const holdOpen = (outgoing, take, give) => {
37
114
  return;
38
115
  }
39
116
  granted.now = true;
117
+ if (watch !== undefined) {
118
+ granted.held = watch.holding(holding.deadline);
119
+ }
120
+ holding.held = true;
121
+ holding.since = Date.now();
40
122
  outgoing.writeHead(200).flushHeaders();
41
123
  })
42
124
  .catch((error) => {
43
- outgoing.writeHead(503).end(String(error));
125
+ outgoing.writeHead(503).end(error instanceof Error ? error.message : String(error));
44
126
  });
45
127
  };
46
128
  /** Grants the waiting turns in order while the first fits, so a turn asking more than are free
@@ -57,15 +139,26 @@ const admit = (queue) => {
57
139
  };
58
140
  const enqueue = async (queue, { run, slots }, gone) => {
59
141
  const { promise, resolve, reject } = Promise.withResolvers();
142
+ const done = queue.watch.waiting((stalled) => {
143
+ queue.waiting.delete(waiting);
144
+ waiting.refuse(stalled);
145
+ admit(queue);
146
+ });
60
147
  const waiting = {
61
148
  run,
62
149
  slots,
63
150
  grant: () => {
151
+ done();
152
+ queue.watch.moved();
64
153
  resolve(true);
65
154
  },
66
- refuse: reject,
155
+ refuse: (reason) => {
156
+ done();
157
+ reject(reason);
158
+ },
67
159
  };
68
160
  gone.addEventListener('abort', () => {
161
+ done();
69
162
  queue.waiting.delete(waiting);
70
163
  admit(queue);
71
164
  }, { once: true });
@@ -74,12 +167,16 @@ const enqueue = async (queue, { run, slots }, gone) => {
74
167
  await promise;
75
168
  };
76
169
  /** The slots, first come, first served, so a whole-machine turn is never starved. A set keeps the
77
- * order with O(1) removal. */
78
- export const semaphore = (slots) => {
79
- const queue = { free: slots, waiting: new Set() };
170
+ * order with O(1) removal. A wait fails once no slot has changed hands for the stillness's stall,
171
+ * saying `what` stood still. */
172
+ export const semaphore = (slots, { stillness = STILLNESS, what = 'no slot' } = {}) => {
173
+ const watch = watchOf(stillness, { what, named: holdingsNamed });
174
+ const queue = { free: slots, waiting: new Set(), watch };
80
175
  return {
176
+ watch,
81
177
  take: async (run, asked, gone) => enqueue(queue, { run, slots: asked }, gone),
82
178
  give: (given) => {
179
+ watch.moved();
83
180
  queue.free += given;
84
181
  admit(queue);
85
182
  },
@@ -112,11 +209,19 @@ const listen = async (server, port) => {
112
209
  };
113
210
  /** A turn for `run`: held while it's a member, gone (410) once it has left, and not found (404)
114
211
  * for a run never seen, whose gate was stopped and which is rejoining this one. */
115
- const turnFor = (runs, { run, size }, outgoing) => {
212
+ const turnFor = (runs, { run, size, incoming, }, outgoing) => {
116
213
  if (runs.members.has(run)) {
117
214
  const asked = size === WHOLE ? runs.slots : 1;
118
- holdOpen(outgoing, async (gone) => runs.turns.take(run, asked, gone), () => {
119
- runs.turns.give(asked);
215
+ holdOpen(outgoing, {
216
+ take: async (gone) => runs.turns.take(run, asked, gone),
217
+ give: () => {
218
+ runs.turns.give(asked);
219
+ },
220
+ what: `${String(asked)} of the CPU gate's slots for run ${run}`,
221
+ who: holderOf(incoming),
222
+ deadline: deadlineOf(incoming),
223
+ watch: runs.turns.watch,
224
+ id: holdIdOf(incoming),
120
225
  });
121
226
  }
122
227
  else if (runs.left.has(run)) {
@@ -130,7 +235,13 @@ const answer = (gate, runs) => (incoming, outgoing) => {
130
235
  const [, action = '', encoded = '', size = ''] = (incoming.url ?? '').split('/');
131
236
  const run = decodeURIComponent(encoded);
132
237
  incoming.resume();
133
- if (run === '') {
238
+ if (action === 'holders') {
239
+ answerHolders(outgoing);
240
+ }
241
+ else if (action === 'deadline') {
242
+ answerDeadline(outgoing, run, size);
243
+ }
244
+ else if (run === '') {
134
245
  outgoing.writeHead(404).end(`no run named for ${action}`);
135
246
  }
136
247
  else if (action === 'join') {
@@ -141,7 +252,7 @@ const answer = (gate, runs) => (incoming, outgoing) => {
141
252
  outgoing.writeHead(200, { [GATE_MARK]: GATE_VERSION }).flushHeaders();
142
253
  }
143
254
  else if (action === 'cpu') {
144
- turnFor(runs, { run, size }, outgoing);
255
+ turnFor(runs, { run, size, incoming }, outgoing);
145
256
  }
146
257
  else {
147
258
  outgoing.writeHead(404).end(`no ${action} for ${run}, which has not joined`);
@@ -150,7 +261,8 @@ const answer = (gate, runs) => (incoming, outgoing) => {
150
261
  /** The gate on a listening server: a run joins, holds turns while joined, and leaves. Its last
151
262
  * member's leave closes the port before anything else, so a join it then refuses finds it free. */
152
263
  const gateOn = (server, slots) => {
153
- const runs = { turns: semaphore(slots), slots, members: new Set(), left: new Set() };
264
+ const turns = semaphore(slots, { what: 'no CPU turn' });
265
+ const runs = { turns, slots, members: new Set(), left: new Set() };
154
266
  const gate = {
155
267
  hold: (run) => {
156
268
  runs.left.delete(run);
@@ -1 +1 @@
1
- {"version":3,"file":"gate-server.js","sourceRoot":"","sources":["../../../../testing/src/stack/gate-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gate-server.js","sourceRoot":"","sources":["../../../../testing/src/stack/gate-server.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,10 @@
1
+ /** The header a hold's request names its holder in (its test, worker and process), URI-encoded
2
+ * for the characters a test's title holds and a header can't. */
3
+ export declare const HOLDER_HEADER = "x-kit-holder";
4
+ /** The header a hold's request gives its test's deadline in, as epoch milliseconds. */
5
+ export declare const DEADLINE_HEADER = "x-kit-deadline";
6
+ /** The header a hold's request gives its id in, by which its test moves its deadline later. */
7
+ export declare const HOLD_ID_HEADER = "x-kit-hold";
1
8
  /** A kind of hold: what it is called, what a refusal of it says, and who hears should the server
2
9
  * end it first; with no one named, the holder's release fails instead. */
3
10
  export interface HoldKind {
@@ -5,9 +12,23 @@ export interface HoldKind {
5
12
  readonly refused: (status: number | undefined) => string;
6
13
  readonly ended?: () => void;
7
14
  }
15
+ /** One holding a server lists: what, by whom, since when, held or waited for. */
16
+ export declare const described: (entry: unknown, now: number) => string;
17
+ /** Moves the deadline of every hold this process has open to `deadline` (epoch milliseconds, or
18
+ * none), as its test's timeout moved; a server that can't be told keeps the one it had. */
19
+ export declare const announceDeadline: (deadline?: number) => Promise<void>;
8
20
  /** The status a refusal carries, if any. */
9
21
  export declare const statusOf: (error: unknown) => unknown;
10
- /** Asks `url` for a hold, answering its release once granted; an abort gives up a hold not yet
11
- * granted, and ends one that is. */
12
- export declare const openHold: (url: URL, kind: HoldKind, signal?: AbortSignal) => Promise<() => void>;
22
+ /** How a hold is asked for: the signal that gives it up, who asks, by when their test must end,
23
+ * and the id its test moves that deadline by (one of its own, unless a relay passes it on). */
24
+ interface Asking {
25
+ readonly signal?: AbortSignal | undefined;
26
+ readonly who?: string;
27
+ readonly deadline?: number | undefined;
28
+ readonly id?: string | undefined;
29
+ }
30
+ /** Asks `url` for a hold, answering its release once granted; an abort ends one that is, and gives
31
+ * up one not yet granted with an AbortError naming who held what it waited for. */
32
+ export declare const openHold: (url: URL, kind: HoldKind, asking?: Asking) => Promise<() => void>;
33
+ export {};
13
34
  //# sourceMappingURL=hold.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hold.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/hold.ts"],"names":[],"mappings":"AAIA;2EAC2E;AAC3E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAMD,4CAA4C;AAC5C,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,OAC8B,CAAC;AA0BzE;qCACqC;AACrC,eAAO,MAAM,QAAQ,QACd,GAAG,QACF,QAAQ,WACL,WAAW,KACnB,OAAO,CAAC,MAAM,IAAI,CAgBpB,CAAC"}
1
+ {"version":3,"file":"hold.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/hold.ts"],"names":[],"mappings":"AAOA;kEACkE;AAClE,eAAO,MAAM,aAAa,iBAAiB,CAAC;AAE5C,uFAAuF;AACvF,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAEhD,+FAA+F;AAC/F,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C;2EAC2E;AAC3E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,iFAAiF;AACjF,eAAO,MAAM,SAAS,UAAW,OAAO,OAAO,MAAM,KAAG,MAavD,CAAC;AA0CF;4FAC4F;AAC5F,eAAO,MAAM,gBAAgB,cAAqB,MAAM,KAAG,OAAO,CAAC,IAAI,CAqBtE,CAAC;AAMF,4CAA4C;AAC5C,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,OAC8B,CAAC;AA0BzE;gGACgG;AAChG,UAAU,MAAM;IACd,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAuBD;oFACoF;AACpF,eAAO,MAAM,QAAQ,QACd,GAAG,QACF,QAAQ,WACN,MAAM,KACb,OAAO,CAAC,MAAM,IAAI,CA4CpB,CAAC"}
@@ -1,6 +1,85 @@
1
1
  // A hold (a stack lock, a CPU turn) is an open request: granted with the response head, and held
2
2
  // until the holder closes it, so a holder that dies gives it back.
3
- import { request } from 'node:http';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { get, request } from 'node:http';
5
+ import { isObject } from '../unknown.js';
6
+ /** The header a hold's request names its holder in (its test, worker and process), URI-encoded
7
+ * for the characters a test's title holds and a header can't. */
8
+ export const HOLDER_HEADER = 'x-kit-holder';
9
+ /** The header a hold's request gives its test's deadline in, as epoch milliseconds. */
10
+ export const DEADLINE_HEADER = 'x-kit-deadline';
11
+ /** The header a hold's request gives its id in, by which its test moves its deadline later. */
12
+ export const HOLD_ID_HEADER = 'x-kit-hold';
13
+ /** One holding a server lists: what, by whom, since when, held or waited for. */
14
+ export const described = (entry, now) => {
15
+ if (!isObject(entry)) {
16
+ return String(entry);
17
+ }
18
+ const { what, who, since, held, deadline } = entry;
19
+ const seconds = typeof since === 'number' ? Math.round((now - since) / 1000) : '?';
20
+ const state = held === true ? 'held' : 'waited for';
21
+ const left = typeof deadline === 'number' ? Math.round((deadline - now) / 1000) : undefined;
22
+ const due = left === undefined
23
+ ? ''
24
+ : `, ${left >= 0 ? `due in ${String(left)} s` : `${String(-left)} s past its deadline`}`;
25
+ return `${String(what)} ${state} by ${String(who)} for ${String(seconds)} s${due}`;
26
+ };
27
+ /** The holdings a GET /holders listed, each named. */
28
+ const namedIn = (listed) => {
29
+ if (!Array.isArray(listed) || listed.length === 0) {
30
+ return 'it records no holder or waiter';
31
+ }
32
+ const now = Date.now();
33
+ return listed.map((entry) => described(entry, now)).join('; ');
34
+ };
35
+ /** Who holds and waits at `origin`, as its GET /holders lists them, or why it couldn't say. Read
36
+ * through node:http, which tells a reset as its request's error: Node 24.21's fetch (undici
37
+ * 7.29.1) throws it uncaught from `setTypeOfService` on macOS, ending the process. */
38
+ const holdersAt = async (origin) => {
39
+ const { promise, resolve } = Promise.withResolvers();
40
+ const failed = (error) => {
41
+ resolve(`its holders could not be read: ${String(error)}`);
42
+ };
43
+ const call = get(new URL('/holders', origin), { signal: AbortSignal.timeout(5000) }, (answer) => {
44
+ const chunks = [];
45
+ answer
46
+ .on('data', (chunk) => {
47
+ chunks.push(chunk);
48
+ })
49
+ .once('end', () => {
50
+ try {
51
+ const listed = JSON.parse(Buffer.concat(chunks).toString('utf8'));
52
+ resolve(namedIn(listed));
53
+ }
54
+ catch (error) {
55
+ failed(error);
56
+ }
57
+ })
58
+ .once('error', failed);
59
+ });
60
+ call.once('error', failed);
61
+ return promise;
62
+ };
63
+ /** The holds this process has open, granted or waiting, by id: where each is served. */
64
+ const live = new Map();
65
+ /** Moves the deadline of every hold this process has open to `deadline` (epoch milliseconds, or
66
+ * none), as its test's timeout moved; a server that can't be told keeps the one it had. */
67
+ export const announceDeadline = async (deadline) => {
68
+ const given = deadline === undefined ? 'none' : String(Math.ceil(deadline));
69
+ await Promise.all([...live].map(async ([id, origin]) => {
70
+ const { promise, resolve } = Promise.withResolvers();
71
+ const call = request(new URL(`/deadline/${id}/${given}`, origin), { method: 'POST' }, (answer) => {
72
+ answer.resume().once('end', () => {
73
+ resolve(true);
74
+ });
75
+ });
76
+ call.once('error', () => {
77
+ resolve(false);
78
+ });
79
+ call.end();
80
+ await promise;
81
+ }));
82
+ };
4
83
  /** A hold refused, with the status the server answered. */
5
84
  const refusal = (message, status) => Object.assign(new Error(message), { status });
6
85
  /** The status a refusal carries, if any. */
@@ -24,23 +103,69 @@ const releaseOf = (call, granted, { held, ended }) => {
24
103
  }
25
104
  };
26
105
  };
27
- /** Asks `url` for a hold, answering its release once granted; an abort gives up a hold not yet
28
- * granted, and ends one that is. */
29
- export const openHold = async (url, kind, signal) => {
106
+ /** A hold request's headers: its id, its holder's name, URI-encoded, and its test's deadline. */
107
+ const headersOf = ({ who, deadline }, id) => {
108
+ const headers = { [HOLD_ID_HEADER]: id };
109
+ if (who !== undefined) {
110
+ headers[HOLDER_HEADER] = encodeURIComponent(who);
111
+ }
112
+ if (deadline !== undefined) {
113
+ headers[DEADLINE_HEADER] = String(Math.ceil(deadline));
114
+ }
115
+ return headers;
116
+ };
117
+ /** Counts a hold among this process's open ones, waiting or granted, until its request closes: its
118
+ * test may move its deadline meanwhile. */
119
+ const counted = (call, id, origin) => {
120
+ live.set(id, origin);
121
+ call.once('close', () => {
122
+ live.delete(id);
123
+ });
124
+ };
125
+ /** Asks `url` for a hold, answering its release once granted; an abort ends one that is, and gives
126
+ * up one not yet granted with an AbortError naming who held what it waited for. */
127
+ export const openHold = async (url, kind, asking = {}) => {
128
+ const { signal, id = randomUUID() } = asking;
30
129
  const { promise, resolve, reject } = Promise.withResolvers();
31
- const call = request(url, { method: 'POST', signal }, (response) => {
130
+ const headers = headersOf(asking, id);
131
+ const waiting = { granted: false };
132
+ const call = request(url, { method: 'POST', signal, headers }, (response) => {
32
133
  const { statusCode: status } = response;
33
- // Read: a refusal to its end, so its socket is freed, as one left unread holds the process open;
34
- // a grant, so that its server ending it whole is heard.
35
- response.resume();
134
+ // Read: a grant, so that its server ending it whole is heard; a refusal to its end, so its
135
+ // socket is freed, as one left unread holds the process open, and what it says is told.
36
136
  if (status === 200) {
137
+ waiting.granted = true;
138
+ response.resume();
37
139
  resolve(releaseOf(call, response, kind));
140
+ return;
141
+ }
142
+ const said = [];
143
+ response
144
+ .on('data', (chunk) => {
145
+ said.push(chunk);
146
+ })
147
+ .once('close', () => {
148
+ const reason = Buffer.concat(said).toString('utf8').trim();
149
+ const message = kind.refused(status);
150
+ reject(refusal(reason === '' ? message : `${message}: ${reason}`, status));
151
+ });
152
+ });
153
+ call.on('error', (error) => {
154
+ // A granted hold's end, by its release or its server, is the release's to hear.
155
+ if (waiting.granted) {
156
+ return;
38
157
  }
39
- else {
40
- reject(refusal(kind.refused(status), status));
158
+ if (signal === undefined || !signal.aborted) {
159
+ reject(error);
160
+ return;
41
161
  }
162
+ waiting.failing = holdersAt(url.origin).then((holders) => {
163
+ const given = `the wait for ${kind.held} was given up before a grant`;
164
+ const named = new Error(`${given}: at its server, ${holders}`, { cause: error });
165
+ reject(Object.assign(named, { name: 'AbortError' }));
166
+ });
42
167
  });
43
- call.on('error', reject);
168
+ counted(call, id, url.origin);
44
169
  call.end();
45
170
  return promise;
46
171
  };
@@ -1 +1 @@
1
- {"version":3,"file":"hold.js","sourceRoot":"","sources":["../../../../testing/src/stack/hold.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,mEAAmE;AACnE,OAAO,EAA4C,OAAO,EAAE,MAAM,WAAW,CAAC;AAU9E,2DAA2D;AAC3D,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,MAA0B,EAAS,EAAE,CACrE,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAEhD,4CAA4C;AAC5C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAW,EAAE,CAClD,KAAK,YAAY,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAEzE;wGACwG;AACxG,MAAM,SAAS,GAAG,CAChB,IAAmB,EACnB,OAAwB,EACxB,EAAE,IAAI,EAAE,KAAK,EAAY,EACX,EAAE;IAChB,MAAM,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACtB,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC9B,KAAK,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,EAAE;QACV,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kEAAkE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;qCACqC;AACrC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,GAAQ,EACR,IAAc,EACd,MAAoB,EACC,EAAE;IACvB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAc,CAAC;IACzE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE;QACjE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QACxC,iGAAiG;QACjG,wDAAwD;QACxD,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClB,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
1
+ {"version":3,"file":"hold.js","sourceRoot":"","sources":["../../../../testing/src/stack/hold.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/host.ts"],"names":[],"mappings":"AA6JA;+EAC+E;AAC/E,QAAA,MAAM,WAAW,QAAa,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAsBxD,CAAC;eAEa,WAAW"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/host.ts"],"names":[],"mappings":"AAoLA;+EAC+E;AAC/E,QAAA,MAAM,WAAW,QAAa,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAsBxD,CAAC;eAEa,WAAW"}
@@ -4,14 +4,14 @@ import { discover } from '../discover.js';
4
4
  import { BROWSER_SEATS, startBrowserServer } from './browsers.js';
5
5
  import { CPU_GATE_ENV, HOST_ENV, LINUX_BROWSERS, LINUX_ENV, STACK_ENV, } from './control.js';
6
6
  import { joinGate } from './gate-member.js';
7
- import { holdOpen } from './gate-server.js';
7
+ import { answerDeadline, answerHolders, deadlineOf, holderOf, holdIdOf, holdOpen, } from './gate-server.js';
8
8
  import { seatPool, stackLocks } from './lock.js';
9
9
  import { startTarget } from './stack.js';
10
10
  const ACTIONS = ['start', 'stop', 'restart'];
11
11
  const startKey = async (key, turns, signal) => {
12
12
  if (key === LINUX_BROWSERS) {
13
13
  const server = await startBrowserServer(signal);
14
- return { env: { [LINUX_ENV]: server.wsEndpoint }, stop: server.stop };
14
+ return { env: { [LINUX_ENV]: JSON.stringify(server.endpoints) }, stop: server.stop };
15
15
  }
16
16
  const target = discover().find(({ name }) => name === key);
17
17
  if (target === undefined) {
@@ -72,15 +72,35 @@ const answer = async ({ entries, turns }, action, key) => {
72
72
  return env;
73
73
  };
74
74
  const handle = (hosted) => (incoming, outgoing) => {
75
- const [, action = '', key = ''] = (incoming.url ?? '').split('/');
75
+ const [, action = '', key = '', given = ''] = (incoming.url ?? '').split('/');
76
+ if (action === 'holders') {
77
+ answerHolders(outgoing);
78
+ return;
79
+ }
80
+ if (action === 'deadline') {
81
+ answerDeadline(outgoing, key, given);
82
+ return;
83
+ }
76
84
  if (action === 'browser') {
77
- browsers(outgoing, key);
85
+ browsers(outgoing, key, {
86
+ who: holderOf(incoming),
87
+ deadline: deadlineOf(incoming),
88
+ id: holdIdOf(incoming),
89
+ });
78
90
  return;
79
91
  }
80
92
  if (action === 'share' || action === 'own') {
81
93
  const stack = decodeURIComponent(key);
82
- holdOpen(outgoing, async (gone) => locks.take(stack, action, gone), () => {
83
- locks.give(stack, action);
94
+ holdOpen(outgoing, {
95
+ take: async (gone) => locks.take(stack, action, gone),
96
+ give: () => {
97
+ locks.give(stack, action);
98
+ },
99
+ what: `a ${action} hold on ${stack}`,
100
+ who: holderOf(incoming),
101
+ deadline: deadlineOf(incoming),
102
+ watch: locks.watch(stack),
103
+ id: holdIdOf(incoming),
84
104
  });
85
105
  return;
86
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"host.js","sourceRoot":"","sources":["../../../../testing/src/stack/host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../../../testing/src/stack/host.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,24 @@
1
1
  import type { ServerResponse } from 'node:http';
2
+ import { type Stillness, type Watch } from './stall.ts';
3
+ /** Who asks for a hold, by when their test must end, and the id its request gave. */
4
+ export interface Holder {
5
+ readonly who: string;
6
+ readonly deadline: number | undefined;
7
+ readonly id: string | undefined;
8
+ }
2
9
  /** Who holds a target's stack: many tests share it, one that disturbs it owns it alone. */
3
10
  export type Hold = 'share' | 'own';
4
11
  /** A readers-writer lock per target, kept by the stack host. A waiting owner stops no sharer:
5
- * owners queue after every shared test, so stopping sharers would only idle workers. */
6
- export declare const stackLocks: () => {
12
+ * owners queue after every shared test, so stopping sharers would only idle workers. A wait fails
13
+ * once no hold on its stack has changed hands for the stillness's stall. */
14
+ export declare const stackLocks: (stillness?: Stillness) => {
7
15
  readonly take: (key: string, hold: Hold, gone: AbortSignal) => Promise<void>;
8
16
  readonly give: (key: string, hold: Hold) => void;
17
+ /** The watch over a stack's waits, which a server counts each holder in. */
18
+ readonly watch: (key: string) => Watch;
9
19
  };
10
20
  /** A pool of `size` seats, a holder taking the ones it asks for all at once, in the order asked;
11
- * more than the pool has is refused at once, as it could never be seated. */
12
- export declare const seatPool: (size: number) => ((outgoing: ServerResponse, asked: string) => void);
21
+ * more than the pool has is refused at once, as it could never be seated. A wait fails once no
22
+ * seat has changed hands for the stillness's stall. */
23
+ export declare const seatPool: (size: number, stillness?: Stillness) => ((outgoing: ServerResponse, asked: string, holder: Holder) => void);
13
24
  //# sourceMappingURL=lock.d.ts.map