@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browsers.js","sourceRoot":"","sources":["../../../../testing/src/stack/browsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"browsers.js","sourceRoot":"","sources":["../../../../testing/src/stack/browsers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Service } from './process.ts';
|
|
2
|
-
import type { Address, ContainerSpec, Runtime } from './runtime.ts';
|
|
2
|
+
import type { Address, ContainerSpec, Network, Runtime } from './runtime.ts';
|
|
3
3
|
export interface Container extends Service {
|
|
4
4
|
readonly id: string;
|
|
5
5
|
readonly address: (inner: number) => Address;
|
|
@@ -16,7 +16,11 @@ export declare const leftBehind: (labelled: ReadonlyMap<string, string>, began?:
|
|
|
16
16
|
/** Removes the containers this host's runs left behind once their run was gone: an exit handler
|
|
17
17
|
* removes a run's own, but a SIGKILL lets none run. Another run's, still going, stays. */
|
|
18
18
|
export declare const sweepLeftBehind: (runtime?: Runtime) => Promise<void>;
|
|
19
|
-
|
|
19
|
+
/** A container started from `spec` once it says it's ready; `started` runs as it starts, before
|
|
20
|
+
* that, for a service that waits on something the host gives it. */
|
|
21
|
+
export declare const container: (spec: ContainerSpec, signal: AbortSignal, started?: (id: string) => Promise<void>) => Promise<Container>;
|
|
22
|
+
/** A running container's address on its network, and the host's there. */
|
|
23
|
+
export declare const networkOf: (id: string) => Promise<Network>;
|
|
20
24
|
export declare const exec: (id: string, command: readonly string[], signal: AbortSignal) => Promise<string>;
|
|
21
25
|
/** An exec's command line, for a caller that holds its standard input. */
|
|
22
26
|
export declare const execLine: (id: string, command: readonly string[]) => readonly [string, ...string[]];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/containers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/containers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CAC9C;AAKD;0FAC0F;AAC1F,eAAO,MAAM,SAAS,SACd,MAAM,GAAG,SAAS,aACd,MAAM,CAAC,QAAQ,KACxB,OASF,CAAC;AAEF,eAAO,MAAM,OAAO,SAAsC,CAAC;AAE3D;2EAC2E;AAC3E,eAAO,MAAM,SAAS,8BAA8B,CAAC;AAErD,2EAA2E;AAC3E,eAAO,MAAM,UAAU,aACX,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAC7B,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,SACxB,MAAM,KACZ,MAAM,EAAsF,CAAC;AAEhG;2FAC2F;AAC3F,eAAO,MAAM,eAAe,aAAmB,OAAO,KAAa,OAAO,CAAC,IAAI,CAK9E,CAAC;AAkCF;qEACqE;AACrE,eAAO,MAAM,SAAS,SACd,aAAa,UACX,WAAW,YACT,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,KACtC,OAAO,CAAC,SAAS,CAsBnB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,SAAS,OAAc,MAAM,KAAG,OAAO,CAAC,OAAO,CAAwB,CAAC;AAErF,eAAO,MAAM,IAAI,OACX,MAAM,WACD,SAAS,MAAM,EAAE,UAClB,WAAW,KAClB,OAAO,CAAC,MAAM,CAAsC,CAAC;AAExD,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,OAAQ,MAAM,WAAW,SAAS,MAAM,EAAE,KAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAChE,CAAC"}
|
|
@@ -57,7 +57,9 @@ const addressIn = (id, addresses) => (inner) => {
|
|
|
57
57
|
}
|
|
58
58
|
return found;
|
|
59
59
|
};
|
|
60
|
-
|
|
60
|
+
/** A container started from `spec` once it says it's ready; `started` runs as it starts, before
|
|
61
|
+
* that, for a service that waits on something the host gives it. */
|
|
62
|
+
export const container = async (spec, signal, started) => {
|
|
61
63
|
signal.throwIfAborted();
|
|
62
64
|
await sweptOnce();
|
|
63
65
|
const { id, forget } = await created(spec);
|
|
@@ -66,6 +68,9 @@ export const container = async (spec, signal) => {
|
|
|
66
68
|
forget();
|
|
67
69
|
};
|
|
68
70
|
try {
|
|
71
|
+
if (started !== undefined) {
|
|
72
|
+
await started(id);
|
|
73
|
+
}
|
|
69
74
|
const texts = spec.readyInAnyOrder === true ? spec.ready.map((text) => [text]) : [spec.ready];
|
|
70
75
|
await Promise.all(texts.map(async (text) => RUNTIME.ready(id, { texts: text, logFile: spec.logFile }, signal)));
|
|
71
76
|
return { id, stop, address: addressIn(id, await RUNTIME.addresses(id, spec.ports)) };
|
|
@@ -76,6 +81,8 @@ export const container = async (spec, signal) => {
|
|
|
76
81
|
throw error;
|
|
77
82
|
}
|
|
78
83
|
};
|
|
84
|
+
/** A running container's address on its network, and the host's there. */
|
|
85
|
+
export const networkOf = async (id) => RUNTIME.network(id);
|
|
79
86
|
export const exec = async (id, command, signal) => RUNTIME.exec(id, command, signal);
|
|
80
87
|
/** An exec's command line, for a caller that holds its standard input. */
|
|
81
88
|
export const execLine = (id, command) => RUNTIME.execLine(id, command);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../../../../testing/src/stack/containers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../../../../testing/src/stack/containers.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,19 +9,34 @@ export declare const STACK_ENV = "KIT_STACK";
|
|
|
9
9
|
/** The Linux browser server's key: WebKit rows use it on macOS, whose WebKit guards CryptoKeys with
|
|
10
10
|
* a keychain prompt, and the visual projects' Chromium, so screenshots match on every machine. */
|
|
11
11
|
export declare const LINUX_BROWSERS = "linux-browsers";
|
|
12
|
-
/** The variable WebKit rows and the visual projects read that server's
|
|
12
|
+
/** The variable WebKit rows and the visual projects read that server's endpoints from, by engine,
|
|
13
|
+
* in JSON. */
|
|
13
14
|
export declare const LINUX_ENV = "KIT_LINUX_BROWSERS";
|
|
14
15
|
export type Action = 'start' | 'stop' | 'restart';
|
|
15
16
|
/** Asks the stack host to start or stop a target's services, answering its projects' environment.
|
|
16
17
|
* Plain `node:http`, so no client timeout cuts off a long build: the setup project's bounds it. */
|
|
17
18
|
export declare const control: (action: Action, key: string) => Promise<Record<string, string>>;
|
|
19
|
+
/** The running test's clock, as Playwright keeps its timeout: when it began, and how long it has
|
|
20
|
+
* waited for holds in fixtures of their own timeout, which aren't charged to it. */
|
|
21
|
+
export interface TestClock {
|
|
22
|
+
start: number;
|
|
23
|
+
waited: number;
|
|
24
|
+
}
|
|
25
|
+
/** Starts the running test's clock (fixtures.ts), at `now`. */
|
|
26
|
+
export declare const testBegins: (now?: number) => void;
|
|
27
|
+
/** When a test must end, by Playwright's count: its start, plus the hold waits it isn't charged,
|
|
28
|
+
* plus its timeout; none for a test with no timeout. A hold's server lets a stillness pass while
|
|
29
|
+
* its holders are inside their deadlines; the test moves them as its timeout moves. */
|
|
30
|
+
export declare const deadlineFrom: (timeout: number, clock?: TestClock) => number | undefined;
|
|
31
|
+
/** `wait` for a hold, its time added to the running test's waits, which its deadline is past. */
|
|
32
|
+
export declare const waitedFor: <Value>(wait: () => Promise<Value>) => Promise<Value>;
|
|
18
33
|
/**
|
|
19
34
|
* Holds a target's stack, shared or owned alone, until the returned release is called: the hold
|
|
20
35
|
* is an open request, so a worker that dies releases it by closing its connection.
|
|
21
36
|
*/
|
|
22
37
|
export declare const holdStack: (hold: 'share' | 'own', key: string) => Promise<() => void>;
|
|
23
|
-
/** A seat among the Linux image's browsers for each context the
|
|
24
|
-
*
|
|
38
|
+
/** A seat among the Linux image's browsers for each context the test may have open at once, all
|
|
39
|
+
* taken together and held as a stack hold is, for the test's life. */
|
|
25
40
|
export declare const holdBrowserSeat: (contexts: number) => Promise<() => void>;
|
|
26
41
|
/** A CPU turn, until the returned release; an abort gives up a turn still waiting. */
|
|
27
42
|
export declare const holdTurn: (turns: string, signal?: AbortSignal) => Promise<() => void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/control.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/control.ts"],"names":[],"mappings":"AAQA,oFAAoF;AACpF,eAAO,MAAM,QAAQ,mBAAmB,CAAC;AAEzC,gGAAgG;AAChG,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,oFAAoF;AACpF,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,4EAA4E;AAC5E,eAAO,MAAM,SAAS,cAAc,CAAC;AAErC;mGACmG;AACnG,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAE/C;eACe;AACf,eAAO,MAAM,SAAS,uBAAuB,CAAC;AAE9C,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAelD;oGACoG;AACpG,eAAO,MAAM,OAAO,WAAkB,MAAM,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBzF,CAAC;AAEF;qFACqF;AACrF,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,+DAA+D;AAC/D,eAAO,MAAM,UAAU,SAAS,MAAM,KAAgB,IAGrD,CAAC;AAEF;;wFAEwF;AACxF,eAAO,MAAM,YAAY,YAAa,MAAM,UAAS,SAAS,KAAa,MAAM,GAAG,SACpB,CAAC;AAEjE,iGAAiG;AACjG,eAAO,MAAM,SAAS,GAAU,KAAK,QAAQ,MAAM,OAAO,CAAC,KAAK,CAAC,KAAG,OAAO,CAAC,KAAK,CAOhF,CAAC;AAuBF;;;GAGG;AACH,eAAO,MAAM,SAAS,SAAgB,OAAO,GAAG,KAAK,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,IAAI,CAWpF,CAAC;AAEJ;uEACuE;AACvE,eAAO,MAAM,eAAe,aAAoB,MAAM,KAAG,OAAO,CAAC,MAAM,IAAI,CAcxE,CAAC;AAIJ,sFAAsF;AACtF,eAAO,MAAM,QAAQ,UAAiB,MAAM,WAAW,WAAW,KAAG,OAAO,CAAC,MAAM,IAAI,CACR,CAAC;AAahF,4CAA4C;AAC5C,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,MAAM,IAAI,CAYvD,CAAC;AAEF,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAoBD;4FAC4F;AAC5F,eAAO,MAAM,aAAa,UAAgB,WAAW,KAAiB,OAAO,CAAC,IAAI,CAOjF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,KAAK,SAC9B,MAAM,QACP,MAAM,OAAO,CAAC,KAAK,CAAC,KACzB,OAAO,CAAC,KAAK,CAOf,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { request } from 'node:http';
|
|
2
2
|
import { test } from '@playwright/test';
|
|
3
|
+
import { holdCpuTurn } from './gate-member.js';
|
|
3
4
|
import { WHOLE } from './gate-server.js';
|
|
4
5
|
import { openHold } from './hold.js';
|
|
5
6
|
/** The variable naming the stack host, set by the global setup for every worker. */
|
|
@@ -13,7 +14,8 @@ export const STACK_ENV = 'KIT_STACK';
|
|
|
13
14
|
/** The Linux browser server's key: WebKit rows use it on macOS, whose WebKit guards CryptoKeys with
|
|
14
15
|
* a keychain prompt, and the visual projects' Chromium, so screenshots match on every machine. */
|
|
15
16
|
export const LINUX_BROWSERS = 'linux-browsers';
|
|
16
|
-
/** The variable WebKit rows and the visual projects read that server's
|
|
17
|
+
/** The variable WebKit rows and the visual projects read that server's endpoints from, by engine,
|
|
18
|
+
* in JSON. */
|
|
17
19
|
export const LINUX_ENV = 'KIT_LINUX_BROWSERS';
|
|
18
20
|
const isEnv = (value) => typeof value === 'object' &&
|
|
19
21
|
value !== null &&
|
|
@@ -51,6 +53,48 @@ export const control = async (action, key) => {
|
|
|
51
53
|
call.end();
|
|
52
54
|
return promise;
|
|
53
55
|
};
|
|
56
|
+
/** This worker's running test's clock: a worker runs one test at a time. */
|
|
57
|
+
const running = { start: Date.now(), waited: 0 };
|
|
58
|
+
/** Starts the running test's clock (fixtures.ts), at `now`. */
|
|
59
|
+
export const testBegins = (now = Date.now()) => {
|
|
60
|
+
running.start = now;
|
|
61
|
+
running.waited = 0;
|
|
62
|
+
};
|
|
63
|
+
/** When a test must end, by Playwright's count: its start, plus the hold waits it isn't charged,
|
|
64
|
+
* plus its timeout; none for a test with no timeout. A hold's server lets a stillness pass while
|
|
65
|
+
* its holders are inside their deadlines; the test moves them as its timeout moves. */
|
|
66
|
+
export const deadlineFrom = (timeout, clock = running) => timeout > 0 ? clock.start + clock.waited + timeout : undefined;
|
|
67
|
+
/** `wait` for a hold, its time added to the running test's waits, which its deadline is past. */
|
|
68
|
+
export const waitedFor = async (wait) => {
|
|
69
|
+
const asked = Date.now();
|
|
70
|
+
try {
|
|
71
|
+
return await wait();
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
running.waited += Date.now() - asked;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const holderDeadline = () => {
|
|
78
|
+
try {
|
|
79
|
+
return deadlineFrom(test.info().timeout);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
/** Who asks for a hold, for its server's holder record: the running test, if any, its worker and
|
|
86
|
+
* its process, so a wait past its bound names who held what. */
|
|
87
|
+
const holderName = () => {
|
|
88
|
+
const worker = process.env['TEST_WORKER_INDEX'];
|
|
89
|
+
const where = `${worker === undefined ? '' : `worker ${worker}, `}pid ${String(process.pid)}`;
|
|
90
|
+
try {
|
|
91
|
+
const info = test.info();
|
|
92
|
+
return `${info.project.name} › ${info.title} (${where})`;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return where;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
54
98
|
/**
|
|
55
99
|
* Holds a target's stack, shared or owned alone, until the returned release is called: the hold
|
|
56
100
|
* is an open request, so a worker that dies releases it by closing its connection.
|
|
@@ -58,22 +102,18 @@ export const control = async (action, key) => {
|
|
|
58
102
|
export const holdStack = async (hold, key) => openHold(new URL(`/${hold}/${encodeURIComponent(key)}`, required(HOST_ENV, 'the stack host starts in the global setup')), {
|
|
59
103
|
held: `a ${hold} hold on ${key}`,
|
|
60
104
|
refused: () => `the stack host refused a ${hold} hold on ${key}`,
|
|
61
|
-
});
|
|
62
|
-
/** A seat among the Linux image's browsers for each context the
|
|
63
|
-
*
|
|
105
|
+
}, { who: holderName(), deadline: holderDeadline() });
|
|
106
|
+
/** A seat among the Linux image's browsers for each context the test may have open at once, all
|
|
107
|
+
* taken together and held as a stack hold is, for the test's life. */
|
|
64
108
|
export const holdBrowserSeat = async (contexts) => openHold(new URL(`/browser/${String(contexts)}`, required(HOST_ENV, 'the stack host starts in the global setup')), {
|
|
65
109
|
held: 'seats among the Linux browsers',
|
|
66
110
|
refused: (status) => status === 400
|
|
67
111
|
? `the Linux browsers seat fewer than the ${String(contexts)} browserContexts declared`
|
|
68
112
|
: 'the stack host refused seats among the Linux browsers',
|
|
69
|
-
});
|
|
113
|
+
}, { who: holderName(), deadline: holderDeadline() });
|
|
70
114
|
const runTurns = () => required(CPU_GATE_ENV, 'the global setup joins the CPU gate');
|
|
71
|
-
const TURN = {
|
|
72
|
-
held: 'a CPU turn',
|
|
73
|
-
refused: (status) => `the CPU gate refused a turn (${String(status)}): the run has left it, or lost it`,
|
|
74
|
-
};
|
|
75
115
|
/** A CPU turn, until the returned release; an abort gives up a turn still waiting. */
|
|
76
|
-
export const holdTurn = async (turns, signal) =>
|
|
116
|
+
export const holdTurn = async (turns, signal) => holdCpuTurn(turns, { signal, who: holderName(), deadline: holderDeadline() });
|
|
77
117
|
/** The running test's CPU turn in this worker, which runs one test at a time. */
|
|
78
118
|
const worker = { held: undefined };
|
|
79
119
|
/** One slot, until the returned release. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../../../testing/src/stack/control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../../../testing/src/stack/control.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,4 +11,14 @@ export declare const isAbsent: (error: unknown) => boolean;
|
|
|
11
11
|
/** Joins the gate on `port` as a new run, which joins the next under its name should the gate go,
|
|
12
12
|
* so its tests' turns go on there; `lost` hears why if it can't. */
|
|
13
13
|
export declare const joinGate: (port?: number, lost?: (reason: unknown) => void) => Promise<Membership>;
|
|
14
|
+
/** A CPU turn at `turns` (a run's, or with `/whole`, every slot), until the returned release; an
|
|
15
|
+
* abort gives up a turn still waiting. */
|
|
16
|
+
export declare const holdCpuTurn: (turns: string, asking: {
|
|
17
|
+
readonly signal?: AbortSignal | undefined;
|
|
18
|
+
readonly who: string;
|
|
19
|
+
readonly deadline?: number | undefined;
|
|
20
|
+
}) => Promise<() => void>;
|
|
21
|
+
/** Runs `work` holding every slot of the CPU gate on `port`, joined for it alone, once the gate's
|
|
22
|
+
* queue reaches it: no other run's tests share the cores while it runs. */
|
|
23
|
+
export declare const inWholeTurn: <Value>(work: () => Promise<Value>, who: string, port?: number) => Promise<Value>;
|
|
14
24
|
//# sourceMappingURL=gate-member.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-member.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/gate-member.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gate-member.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/gate-member.ts"],"names":[],"mappings":"AA8BA,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;6EAC6E;AAC7E,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,OAGgD,CAAC;AAkP3F;qEACqE;AACrE,eAAO,MAAM,QAAQ,yBAEZ,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,KAC/B,OAAO,CAAC,UAAU,CAuBpB,CAAC;AASF;2CAC2C;AAC3C,eAAO,MAAM,WAAW,UACf,MAAM,UACL;IACN,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC,KACA,OAAO,CAAC,MAAM,IAAI,CAA2C,CAAC;AAEjE;4EAC4E;AAC5E,eAAO,MAAM,WAAW,GAAU,KAAK,QAC/B,MAAM,OAAO,CAAC,KAAK,CAAC,OACrB,MAAM,oBAEV,OAAO,CAAC,KAAK,CAYf,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { spawn } from 'node:child_process';
|
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { once } from 'node:events';
|
|
4
4
|
import { createServer, request, } from 'node:http';
|
|
5
|
-
import { GATE_MARK, GATE_PORT, GATE_SCRIPT, GATE_VERSION, holdOpen, LAUNCH, SERVES, TAKEN, WHOLE, } from './gate-server.js';
|
|
5
|
+
import { answerDeadline, answerHolders, GATE_MARK, GATE_PORT, GATE_SCRIPT, GATE_VERSION, deadlineOf, holderOf, holdIdOf, holdOpen, LAUNCH, SERVES, TAKEN, WHOLE, } from './gate-server.js';
|
|
6
6
|
import { openHold, statusOf } from './hold.js';
|
|
7
7
|
/** A gate not there, or closing as the join reaches it (refused, reset, or EPIPE mid-write): each
|
|
8
8
|
* is answered by starting a gate, as a gate closes its port as it stops. */
|
|
@@ -137,7 +137,8 @@ const turnAtGate = async (held, asked, gone) => {
|
|
|
137
137
|
},
|
|
138
138
|
};
|
|
139
139
|
try {
|
|
140
|
-
|
|
140
|
+
const { who, deadline, id } = asked;
|
|
141
|
+
return await openHold(url, kind, { signal: gone, who, deadline, id });
|
|
141
142
|
}
|
|
142
143
|
catch (error) {
|
|
143
144
|
if (held.left || !notYet(error)) {
|
|
@@ -147,17 +148,52 @@ const turnAtGate = async (held, asked, gone) => {
|
|
|
147
148
|
return turnAtGate(held, asked, gone);
|
|
148
149
|
}
|
|
149
150
|
};
|
|
151
|
+
/** A turn's moved deadline, passed on to the gate the turn is held at, which a gate too old to
|
|
152
|
+
* know the route refuses: the turn keeps the deadline it was asked with. */
|
|
153
|
+
const passDeadline = (port, path) => {
|
|
154
|
+
const call = request(`http://127.0.0.1:${String(port)}${path}`, { method: 'POST' }, (answer) => {
|
|
155
|
+
answer.resume();
|
|
156
|
+
});
|
|
157
|
+
call.once('error', () => {
|
|
158
|
+
// A gate gone: there is no turn there to move.
|
|
159
|
+
});
|
|
160
|
+
call.end();
|
|
161
|
+
};
|
|
150
162
|
/** Serves the run's turns to its holders, in this process or its workers, at a local URL; the
|
|
151
163
|
* server lets the process end, and stops taking turns as the run leaves. */
|
|
152
164
|
const serveTurns = async (held) => {
|
|
153
165
|
const server = createServer({ requestTimeout: 0 }, (incoming, holder) => {
|
|
154
166
|
incoming.resume();
|
|
155
|
-
const
|
|
167
|
+
const path = incoming.url ?? '';
|
|
168
|
+
if (path === '/holders') {
|
|
169
|
+
answerHolders(holder);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (path.startsWith('/deadline/')) {
|
|
173
|
+
const parts = path.split('/');
|
|
174
|
+
answerDeadline(holder, parts[2] ?? '', parts[3] ?? '');
|
|
175
|
+
passDeadline(held.port, path);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const asked = {
|
|
179
|
+
whole: path === `/cpu/${WHOLE}`,
|
|
180
|
+
holder,
|
|
181
|
+
who: holderOf(incoming),
|
|
182
|
+
deadline: deadlineOf(incoming),
|
|
183
|
+
id: holdIdOf(incoming),
|
|
184
|
+
};
|
|
156
185
|
const turn = { release: () => undefined };
|
|
157
|
-
holdOpen(holder,
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
186
|
+
holdOpen(holder, {
|
|
187
|
+
take: async (gone) => {
|
|
188
|
+
turn.release = await turnAtGate(held, asked, gone);
|
|
189
|
+
},
|
|
190
|
+
give: () => {
|
|
191
|
+
turn.release();
|
|
192
|
+
},
|
|
193
|
+
what: asked.whole ? 'every CPU slot' : 'a CPU turn',
|
|
194
|
+
who: asked.who,
|
|
195
|
+
deadline: asked.deadline,
|
|
196
|
+
id: asked.id,
|
|
161
197
|
});
|
|
162
198
|
});
|
|
163
199
|
server.listen(0, '127.0.0.1');
|
|
@@ -195,4 +231,29 @@ export const joinGate = async (port = GATE_PORT, lost) => {
|
|
|
195
231
|
},
|
|
196
232
|
};
|
|
197
233
|
};
|
|
234
|
+
/** What a CPU turn is called, and what a refusal of one says. */
|
|
235
|
+
const TURN = {
|
|
236
|
+
held: 'a CPU turn',
|
|
237
|
+
refused: (status) => `the CPU gate refused a turn (${String(status)}): the run has left it, or lost it`,
|
|
238
|
+
};
|
|
239
|
+
/** A CPU turn at `turns` (a run's, or with `/whole`, every slot), until the returned release; an
|
|
240
|
+
* abort gives up a turn still waiting. */
|
|
241
|
+
export const holdCpuTurn = async (turns, asking) => openHold(new URL(turns), TURN, asking);
|
|
242
|
+
/** Runs `work` holding every slot of the CPU gate on `port`, joined for it alone, once the gate's
|
|
243
|
+
* queue reaches it: no other run's tests share the cores while it runs. */
|
|
244
|
+
export const inWholeTurn = async (work, who, port = GATE_PORT) => {
|
|
245
|
+
const gate = await joinGate(port);
|
|
246
|
+
try {
|
|
247
|
+
const release = await holdCpuTurn(`${gate.turns}/${WHOLE}`, { who });
|
|
248
|
+
try {
|
|
249
|
+
return await work();
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
release();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
gate.leave();
|
|
257
|
+
}
|
|
258
|
+
};
|
|
198
259
|
//# sourceMappingURL=gate-member.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-member.js","sourceRoot":"","sources":["../../../../testing/src/stack/gate-member.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gate-member.js","sourceRoot":"","sources":["../../../../testing/src/stack/gate-member.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type ServerResponse } from 'node:http';
|
|
1
|
+
import { type IncomingMessage, type ServerResponse } from 'node:http';
|
|
2
|
+
import { type Stillness, type Watch } from './stall.ts';
|
|
2
3
|
/** The fixed local port the machine's one CPU gate listens on: every run finds it there. */
|
|
3
4
|
export declare const GATE_PORT = 47391;
|
|
4
5
|
/** The header the gate answers a join with, so a run never joins some other server. */
|
|
@@ -13,17 +14,49 @@ export declare const LAUNCH = "launch";
|
|
|
13
14
|
export declare const SLOTS: number;
|
|
14
15
|
/** The last segment of a turn's path that asks for every slot: a measurement load would skew. */
|
|
15
16
|
export declare const WHOLE = "whole";
|
|
17
|
+
/** A hold a server serves: how it is taken and given back, what it is, who asked for it and by
|
|
18
|
+
* when their test must end, and the watch over its resource's waits, which counts its holders. */
|
|
19
|
+
export interface Served {
|
|
20
|
+
readonly take: (gone: AbortSignal) => Promise<void>;
|
|
21
|
+
readonly give: () => void;
|
|
22
|
+
readonly what: string;
|
|
23
|
+
readonly who: string;
|
|
24
|
+
readonly deadline?: number | undefined;
|
|
25
|
+
readonly watch?: Watch;
|
|
26
|
+
readonly id?: string | undefined;
|
|
27
|
+
}
|
|
28
|
+
/** The deadline a request gives its holder's test, or none. */
|
|
29
|
+
export declare const deadlineOf: (incoming: IncomingMessage) => number | undefined;
|
|
30
|
+
/** The id a hold's request gives itself, or none. */
|
|
31
|
+
export declare const holdIdOf: (incoming: IncomingMessage) => string | undefined;
|
|
32
|
+
/** Moves the deadline of the hold `id` names to `given`, epoch milliseconds or none at all, as
|
|
33
|
+
* its test's timeout moved: 204, or 404 for a hold this process doesn't serve. A request names
|
|
34
|
+
* only an entry of the table: an id of another shape is looked up nowhere. */
|
|
35
|
+
export declare const answerDeadline: (outgoing: ServerResponse, id: string, given: string) => void;
|
|
36
|
+
/** The holder a request names, decoded, or as sent where it isn't URI-encoded; or that it named
|
|
37
|
+
* none. */
|
|
38
|
+
export declare const holderOf: (incoming: IncomingMessage) => string;
|
|
39
|
+
/** This process's holdings, each named as GET /holders gives it: what, by whom, for how long. */
|
|
40
|
+
export declare const holdingsNamed: () => string;
|
|
41
|
+
/** Answers a GET /holders with this process's holdings, as JSON. */
|
|
42
|
+
export declare const answerHolders: (outgoing: ServerResponse) => void;
|
|
16
43
|
/** A hold (a stack lock, a CPU turn) lasts as long as its request stays open: granted with the
|
|
17
44
|
* response head, given back when the caller closes it, however its worker ends. */
|
|
18
|
-
export declare const holdOpen: (outgoing: ServerResponse,
|
|
45
|
+
export declare const holdOpen: (outgoing: ServerResponse, served: Served) => void;
|
|
19
46
|
export interface Semaphore {
|
|
20
47
|
readonly take: (run: string, slots: number, gone: AbortSignal) => Promise<void>;
|
|
21
48
|
readonly give: (slots: number) => void;
|
|
22
49
|
readonly refuse: (run: string) => void;
|
|
50
|
+
/** The watch over its waits, which a server counts each holder in. */
|
|
51
|
+
readonly watch: Watch;
|
|
23
52
|
}
|
|
24
53
|
/** The slots, first come, first served, so a whole-machine turn is never starved. A set keeps the
|
|
25
|
-
* order with O(1) removal.
|
|
26
|
-
|
|
54
|
+
* order with O(1) removal. A wait fails once no slot has changed hands for the stillness's stall,
|
|
55
|
+
* saying `what` stood still. */
|
|
56
|
+
export declare const semaphore: (slots: number, { stillness, what }?: {
|
|
57
|
+
stillness?: Stillness;
|
|
58
|
+
what?: string;
|
|
59
|
+
}) => Semaphore;
|
|
27
60
|
/** A running gate: its members, the starter's hold among them until it lets go. */
|
|
28
61
|
export interface Gate {
|
|
29
62
|
readonly hold: (run: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-server.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/gate-server.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"gate-server.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/gate-server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,eAAe,EAAe,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAIjG,OAAO,EAAwB,KAAK,SAAS,EAAE,KAAK,KAAK,EAAW,MAAM,YAAY,CAAC;AAEvF,4FAA4F;AAC5F,eAAO,MAAM,SAAS,QAAS,CAAC;AAEhC,uFAAuF;AACvF,eAAO,MAAM,SAAS,qBAAqB,CAAC;AAE5C,8FAA8F;AAC9F,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC,mFAAmF;AACnF,eAAO,MAAM,WAAW,QAAuB,CAAC;AAEhD,8EAA8E;AAC9E,eAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,2EAA2E;AAC3E,eAAO,MAAM,KAAK,QAAyB,CAAC;AAE5C,iGAAiG;AACjG,eAAO,MAAM,KAAK,UAAU,CAAC;AAkB7B;mGACmG;AACnG,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAQD,+DAA+D;AAC/D,eAAO,MAAM,UAAU,aAAc,eAAe,KAAG,MAAM,GAAG,SACjB,CAAC;AAEhD,qDAAqD;AACrD,eAAO,MAAM,QAAQ,aAAc,eAAe,KAAG,MAAM,GAAG,SAG7D,CAAC;AAKF;;+EAE+E;AAC/E,eAAO,MAAM,cAAc,aAAc,cAAc,MAAM,MAAM,SAAS,MAAM,KAAG,IAQpF,CAAC;AAEF;YACY;AACZ,eAAO,MAAM,QAAQ,aAAc,eAAe,KAAG,MAUpD,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,aAAa,QAAO,MAKhC,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,aAAa,aAAc,cAAc,KAAG,IAIxD,CAAC;AAEF;oFACoF;AACpF,eAAO,MAAM,QAAQ,aAAc,cAAc,UAAU,MAAM,KAAG,IA6CnE,CAAC;AASF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AA4DD;;iCAEiC;AACjC,eAAO,MAAM,SAAS,UACb,MAAM,wBACgC;IAAE,SAAS,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KACpF,SAoBF,CAAC;AAEF,mFAAmF;AACnF,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AA2GD,eAAO,MAAM,SAAS,SAAgB,MAAM,qBAAkB,OAAO,CAAC,IAAI,GAAG,SAAS,CAIrF,CAAC;AAEF;oDACoD;AACpD,eAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,eAAO,MAAM,KAAK,UAAU,CAAC"}
|