@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.
- package/dist/testing/src/config-coverage.d.ts.map +1 -1
- package/dist/testing/src/config-coverage.js +3 -2
- package/dist/testing/src/config-coverage.js.map +1 -1
- package/dist/testing/src/fixtures.d.ts +9 -3
- package/dist/testing/src/fixtures.d.ts.map +1 -1
- package/dist/testing/src/fixtures.js +98 -42
- package/dist/testing/src/fixtures.js.map +1 -1
- package/dist/testing/src/floors/node.js +11 -3
- package/dist/testing/src/floors/node.js.map +1 -1
- package/dist/testing/src/stack/browsers.d.ts +13 -3
- package/dist/testing/src/stack/browsers.d.ts.map +1 -1
- package/dist/testing/src/stack/browsers.js +117 -14
- package/dist/testing/src/stack/browsers.js.map +1 -1
- package/dist/testing/src/stack/containers.d.ts +6 -2
- package/dist/testing/src/stack/containers.d.ts.map +1 -1
- package/dist/testing/src/stack/containers.js +8 -1
- package/dist/testing/src/stack/containers.js.map +1 -1
- package/dist/testing/src/stack/control.d.ts +18 -3
- package/dist/testing/src/stack/control.d.ts.map +1 -1
- package/dist/testing/src/stack/control.js +50 -10
- package/dist/testing/src/stack/control.js.map +1 -1
- package/dist/testing/src/stack/gate-member.d.ts +10 -0
- package/dist/testing/src/stack/gate-member.d.ts.map +1 -1
- package/dist/testing/src/stack/gate-member.js +68 -7
- package/dist/testing/src/stack/gate-member.js.map +1 -1
- package/dist/testing/src/stack/gate-server.d.ts +37 -4
- package/dist/testing/src/stack/gate-server.d.ts.map +1 -1
- package/dist/testing/src/stack/gate-server.js +124 -12
- package/dist/testing/src/stack/gate-server.js.map +1 -1
- package/dist/testing/src/stack/hold.d.ts +24 -3
- package/dist/testing/src/stack/hold.d.ts.map +1 -1
- package/dist/testing/src/stack/hold.js +136 -11
- package/dist/testing/src/stack/hold.js.map +1 -1
- package/dist/testing/src/stack/host.d.ts.map +1 -1
- package/dist/testing/src/stack/host.js +26 -6
- package/dist/testing/src/stack/host.js.map +1 -1
- package/dist/testing/src/stack/lock.d.ts +15 -4
- package/dist/testing/src/stack/lock.d.ts.map +1 -1
- package/dist/testing/src/stack/lock.js +47 -18
- package/dist/testing/src/stack/lock.js.map +1 -1
- package/dist/testing/src/stack/preview-child.js +14 -3
- package/dist/testing/src/stack/preview-child.js.map +1 -1
- package/dist/testing/src/stack/runtime-apple.d.ts.map +1 -1
- package/dist/testing/src/stack/runtime-apple.js +16 -0
- package/dist/testing/src/stack/runtime-apple.js.map +1 -1
- package/dist/testing/src/stack/runtime-docker.d.ts +2 -1
- package/dist/testing/src/stack/runtime-docker.d.ts.map +1 -1
- package/dist/testing/src/stack/runtime-docker.js +29 -3
- package/dist/testing/src/stack/runtime-docker.js.map +1 -1
- package/dist/testing/src/stack/runtime.d.ts +10 -0
- package/dist/testing/src/stack/runtime.d.ts.map +1 -1
- package/dist/testing/src/stack/runtime.js +1 -0
- package/dist/testing/src/stack/runtime.js.map +1 -1
- package/dist/testing/src/stack/socks.d.ts +25 -0
- package/dist/testing/src/stack/socks.d.ts.map +1 -0
- package/dist/testing/src/stack/socks.js +195 -0
- package/dist/testing/src/stack/socks.js.map +1 -0
- package/dist/testing/src/stack/stall.d.ts +36 -0
- package/dist/testing/src/stack/stall.d.ts.map +1 -0
- package/dist/testing/src/stack/stall.js +93 -0
- package/dist/testing/src/stack/stall.js.map +1 -0
- package/package.json +4 -4
- package/testing/src/config-coverage.ts +3 -2
- package/testing/src/fixtures.ts +277 -197
- package/testing/src/floors/node.ts +19 -3
- package/testing/src/stack/browsers.ts +129 -15
- package/testing/src/stack/containers.ts +14 -2
- package/testing/src/stack/control.ts +62 -11
- package/testing/src/stack/gate-member.ts +90 -8
- package/testing/src/stack/gate-server.ts +166 -21
- package/testing/src/stack/hold.ts +163 -11
- package/testing/src/stack/host.ts +32 -9
- package/testing/src/stack/lock.ts +61 -21
- package/testing/src/stack/preview-child.ts +21 -4
- package/testing/src/stack/runtime-apple.ts +20 -1
- package/testing/src/stack/runtime-docker.ts +47 -3
- package/testing/src/stack/runtime.ts +11 -0
- package/testing/src/stack/socks.ts +233 -0
- 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,
|
|
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:
|
|
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
|
-
|
|
79
|
-
|
|
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,
|
|
119
|
-
runs.turns.
|
|
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 (
|
|
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
|
|
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
|
-
/**
|
|
11
|
-
*
|
|
12
|
-
|
|
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":"
|
|
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 {
|
|
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
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
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
|
|
34
|
-
//
|
|
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
|
-
|
|
40
|
-
reject(
|
|
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
|
|
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,
|
|
1
|
+
{"version":3,"file":"hold.js","sourceRoot":"","sources":["../../../../testing/src/stack/hold.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,mEAAmE;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAsB,GAAG,EAAwB,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;kEACkE;AAClE,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAE5C,uFAAuF;AACvF,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEhD,+FAA+F;AAC/F,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAU3C,iFAAiF;AACjF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,GAAW,EAAU,EAAE;IAC/D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACnD,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACnF,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;IACpD,MAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,GAAG,GACP,IAAI,KAAK,SAAS;QAChB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAC7F,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;AACrF,CAAC,CAAC;AAEF,sDAAsD;AACtD,MAAM,OAAO,GAAG,CAAC,MAAe,EAAU,EAAE;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF;;uFAEuF;AACvF,MAAM,SAAS,GAAG,KAAK,EAAE,MAAc,EAAmB,EAAE;IAC1D,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAU,CAAC;IAC7D,MAAM,MAAM,GAAG,CAAC,KAAc,EAAQ,EAAE;QACtC,OAAO,CAAC,kCAAkC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;QAC9F,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM;aACH,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC;aACD,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;YAChB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3E,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,wFAAwF;AACxF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEvC;4FAC4F;AAC5F,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,QAAiB,EAAiB,EAAE;IACzE,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5E,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;QACnC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAW,CAAC;QAC9D,MAAM,IAAI,GAAG,OAAO,CAClB,IAAI,GAAG,CAAC,aAAa,EAAE,IAAI,KAAK,EAAE,EAAE,MAAM,CAAC,EAC3C,EAAE,MAAM,EAAE,MAAM,EAAE,EAClB,CAAC,MAAM,EAAE,EAAE;YACT,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;gBAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,MAAM,OAAO,CAAC;IAChB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,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;AAWF,iGAAiG;AACjG,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAU,EAAE,EAAU,EAA0B,EAAE;IAClF,MAAM,OAAO,GAA2B,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC;IACjE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,aAAa,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF;4CAC4C;AAC5C,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,EAAU,EAAE,MAAc,EAAQ,EAAE;IACxE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACtB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;oFACoF;AACpF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,GAAQ,EACR,IAAc,EACd,MAAM,GAAW,EAAE,EACE,EAAE;IACvB,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,MAAM,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAc,CAAC;IACzE,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAkD,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAClF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE;QAC1E,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QACxC,2FAA2F;QAC3F,wFAAwF;QACxF,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YACvB,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,QAAQ;aACL,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC;aACD,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACzB,gFAAgF;QAChF,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACvD,MAAM,KAAK,GAAG,gBAAgB,IAAI,CAAC,IAAI,8BAA8B,CAAC;YACtE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACjF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/host.ts"],"names":[],"mappings":"
|
|
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.
|
|
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,
|
|
83
|
-
locks.
|
|
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":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AAEpF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAEL,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,SAAS,EACT,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAmB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,
|
|
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
|
-
|
|
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
|
-
|
|
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
|