@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":"config-coverage.d.ts","sourceRoot":"","sources":["../../../testing/src/config-coverage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-coverage.d.ts","sourceRoot":"","sources":["../../../testing/src/config-coverage.ts"],"names":[],"mappings":"AAQA,iFAAiF;AACjF,eAAO,MAAM,QAAQ,WAAY,MAAM,KAAG,MAAM,EAM7C,CAAC;AAEJ,sDAAsD;AACtD,eAAO,MAAM,aAAa,UAAW,SAAS,MAAM,EAAE,KAAG,MAAM,EACA,CAAC;AAOhE,UAAU,QAAQ;IAChB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD;AAED,yFAAyF;AACzF,eAAO,MAAM,aAAa,aAAc,QAAQ,KAAG,MAAM,EAMxD,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { isObject } from './unknown.js';
|
|
3
|
-
/** A header line of a spec naming the configuration keys it proves, comma separated.
|
|
4
|
-
|
|
3
|
+
/** A header line of a spec naming the configuration keys it proves, comma separated. Its blanks
|
|
4
|
+
* are spaces and tabs only, so it never reaches the next line, and it reads in linear time. */
|
|
5
|
+
const COVERS = /^[ \t]*(?:\/\/|\*)[ \t]*Covers:[ \t]*(?<keys>\S.*)$/gmu;
|
|
5
6
|
/** The keys a spec's header claims, as dotted paths: `limits.max_open_notes`. */
|
|
6
7
|
export const claimsIn = (source) => [...source.matchAll(COVERS)].flatMap((match) => (match.groups === undefined ? '' : (match.groups['keys'] ?? ''))
|
|
7
8
|
.split(',')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-coverage.js","sourceRoot":"","sources":["../../../testing/src/config-coverage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC
|
|
1
|
+
{"version":3,"file":"config-coverage.js","sourceRoot":"","sources":["../../../testing/src/config-coverage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;gGACgG;AAChG,MAAM,MAAM,GAAG,wDAAwD,CAAC;AAExE,iFAAiF;AACjF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAY,EAAE,CACnD,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7C,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;KAC7D,KAAK,CAAC,GAAG,CAAC;KACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;KAC5C,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAC/B,CAAC;AAEJ,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAwB,EAAY,EAAE,CAClE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,MAAc,EAAY,EAAE,CAC1D,QAAQ,CAAC,KAAK,CAAC;IACb,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAWf,yFAAyF;AACzF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAY,EAAE;IAC5D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAC5B,OAAO,QAAQ,CAAC,QAAQ;SACrB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SACrF,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC"}
|
|
@@ -10,18 +10,19 @@ export interface Options {
|
|
|
10
10
|
/** A visual project's: Chromium in the Linux image, holding screens to their baselines. */
|
|
11
11
|
readonly visual: boolean;
|
|
12
12
|
/** The most browser contexts one of the worker's tests has open at once, its own included: a
|
|
13
|
-
* seat each in the Linux image, which a test of several devices declares
|
|
13
|
+
* seat each in the Linux image while the test runs, which a test of several devices declares
|
|
14
|
+
* with `test.use`. */
|
|
14
15
|
readonly browserContexts: number;
|
|
15
16
|
}
|
|
16
17
|
interface StackWorkerFixtures {
|
|
17
18
|
/** The target's running stack, from its setup project. */
|
|
18
19
|
readonly stack: Coordinates;
|
|
19
|
-
/** Whether the worker's browser holds a seat in the Linux image (stack/browsers.ts). */
|
|
20
|
-
readonly browserSeat: boolean;
|
|
21
20
|
}
|
|
22
21
|
interface StackFixtures {
|
|
23
22
|
/** Whether this test owns the stack alone (`@exclusive`), or shares it with every other. */
|
|
24
23
|
readonly stackHold: boolean;
|
|
24
|
+
/** The test's deadline following its timeout to the servers of its holds. */
|
|
25
|
+
readonly deadlines: boolean;
|
|
25
26
|
}
|
|
26
27
|
interface WorkerFixtures {
|
|
27
28
|
/** Chromium's DevTools port, which Lighthouse connects to; no other engine has one. */
|
|
@@ -32,6 +33,11 @@ export interface Devices {
|
|
|
32
33
|
readonly newDevice: (options?: BrowserContextOptions) => Promise<Page>;
|
|
33
34
|
}
|
|
34
35
|
interface TestFixtures {
|
|
36
|
+
/** Whether the test holds seats in the Linux image (stack/browsers.ts), one per context it may
|
|
37
|
+
* have open. */
|
|
38
|
+
readonly browserSeat: boolean;
|
|
39
|
+
/** The test's CPU turn, held for its own work. */
|
|
40
|
+
readonly cpuTurn: boolean;
|
|
35
41
|
readonly invariants: Watch;
|
|
36
42
|
readonly devices: Devices;
|
|
37
43
|
/** Live sockets' channels by path, for a metered page's frame counts. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../testing/src/fixtures.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,qBAAqB,EAE1B,KAAK,IAAI,EACT,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,KAAK,KAAK,EAAS,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAc,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../testing/src/fixtures.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,qBAAqB,EAE1B,KAAK,IAAI,EACT,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,KAAK,KAAK,EAAS,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAkB3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpD,wFAAwF;AACxF,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,SAAS,CAAC;IAC9B,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;2BAEuB;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAQD,UAAU,mBAAmB;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B;AAED,UAAU,aAAa;IACrB,4FAA4F;IAC5F,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAmCD,UAAU,cAAc;IACtB,uFAAuF;IACvF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,gGAAgG;AAChG,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED,UAAU,YAAY;IACpB;qBACiB;IACjB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,8FAA8F;IAC9F,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IAC1C;2BACuB;IACvB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IAClC;2FACuF;IACvF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B;oDACgD;IAChD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAoBD,sFAAsF;AACtF,KAAK,QAAQ,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;AAC3D,KAAK,UAAU,GAAG,oBAAoB,GAAG,uBAAuB,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,QAAQ,CAC5B,QAAQ,GAAG,aAAa,EACxB,UAAU,GAAG,OAAO,GAAG,mBAAmB,CA6D3C,CAAC;AAMF,yFAAyF;AACzF,eAAO,MAAM,IAAI,EAAE,QAAQ,CACzB,QAAQ,GAAG,aAAa,GAAG,YAAY,EACvC,UAAU,GAAG,OAAO,GAAG,mBAAmB,GAAG,cAAc,CAiL5D,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -7,8 +7,9 @@ import { CPU_SLOWDOWN } from './network.js';
|
|
|
7
7
|
import { startMeter } from './perf/measure.js';
|
|
8
8
|
import { FAILURE_ATTACHMENT } from './perf/steps.js';
|
|
9
9
|
import { installVitals } from './perf/vitals.js';
|
|
10
|
-
import { deviceBudget } from './stack/browsers.js';
|
|
11
|
-
import { holdBrowserSeat, holdStack, holdTestTurn, HOST_ENV, LINUX_ENV, MEASURE_ENV, STACK_ENV, } from './stack/control.js';
|
|
10
|
+
import { deviceBudget, endpointOf } from './stack/browsers.js';
|
|
11
|
+
import { holdBrowserSeat, holdStack, deadlineFrom, holdTestTurn, testBegins, waitedFor, HOST_ENV, LINUX_ENV, MEASURE_ENV, STACK_ENV, } from './stack/control.js';
|
|
12
|
+
import { announceDeadline } from './stack/hold.js';
|
|
12
13
|
import { claimPort } from './stack/ports.js';
|
|
13
14
|
import { browserTrust, trustCa } from './stack/tls.js';
|
|
14
15
|
import { BASELINE_ARCH, VISUAL_MOTION } from './visual.js';
|
|
@@ -16,6 +17,32 @@ import { BASELINE_ARCH, VISUAL_MOTION } from './visual.js';
|
|
|
16
17
|
const EXCLUSIVE = '@exclusive';
|
|
17
18
|
/** The tag of a test that makes no page (`apiTest`): run once per target, not on every row. */
|
|
18
19
|
const API = '@api';
|
|
20
|
+
/** The last move of a deadline on its way, so the next follows it and the servers hear them in
|
|
21
|
+
* the order the test made them. */
|
|
22
|
+
const announcing = { last: Promise.resolve(true) };
|
|
23
|
+
/** Tells the servers of the running test's holds its deadline, as its timeout now stands; a server
|
|
24
|
+
* that can't be told keeps the deadline it had. */
|
|
25
|
+
const announceTimeout = (timeout) => {
|
|
26
|
+
const deadline = deadlineFrom(timeout);
|
|
27
|
+
announcing.last = announcing.last.then(async () => announceDeadline(deadline).then(() => true, () => false));
|
|
28
|
+
};
|
|
29
|
+
/** `type.slow()` moves the running test's deadline with its timeout, as `testInfo.slow()` does: it
|
|
30
|
+
* triples the timeout without `setTimeout`, so a hold's deadline would stay a third of it. */
|
|
31
|
+
const followingSlow = (type) => {
|
|
32
|
+
const slow = Reflect.get(type, 'slow');
|
|
33
|
+
if (typeof slow === 'function') {
|
|
34
|
+
Reflect.set(type, 'slow', (...args) => {
|
|
35
|
+
Reflect.apply(slow, type, args);
|
|
36
|
+
try {
|
|
37
|
+
announceTimeout(base.info().timeout);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Called while the file loads, for every test in it: no test runs, so none holds anything.
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return type;
|
|
45
|
+
};
|
|
19
46
|
/** How many times slower the row runs the page's CPU: on Chromium's low tier alone. */
|
|
20
47
|
const slowdownOf = (row, browserName) => browserName === 'chromium' && row !== undefined ? CPU_SLOWDOWN[row.cpu] : 1;
|
|
21
48
|
/** What a failed test's page showed, for the stdout reporter: the suite writes no files. */
|
|
@@ -32,29 +59,32 @@ const isCoordinates = (value) => typeof value === 'object' &&
|
|
|
32
59
|
* A test of the target's API alone, tagged `@api`: it has the stack and its hold, and no browser,
|
|
33
60
|
* page or page invariants; the harness runs it once per target (config.ts), not on every row.
|
|
34
61
|
*/
|
|
35
|
-
export const apiTest = base.extend({
|
|
62
|
+
export const apiTest = followingSlow(base.extend({
|
|
63
|
+
/** A test sets its timeout as it starts, past the holds its fixtures took, or makes itself slow:
|
|
64
|
+
* each change moves the deadline its holds' servers bound their waits by (stack/stall.ts). */
|
|
65
|
+
deadlines: [
|
|
66
|
+
async ({ site: _site }, provide, testInfo) => {
|
|
67
|
+
testBegins();
|
|
68
|
+
const set = testInfo.setTimeout.bind(testInfo);
|
|
69
|
+
const slow = testInfo.slow.bind(testInfo);
|
|
70
|
+
Object.assign(testInfo, {
|
|
71
|
+
setTimeout: (timeout) => {
|
|
72
|
+
set(timeout);
|
|
73
|
+
announceTimeout(testInfo.timeout);
|
|
74
|
+
},
|
|
75
|
+
slow: (...args) => {
|
|
76
|
+
slow(...args);
|
|
77
|
+
announceTimeout(testInfo.timeout);
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
await provide(true);
|
|
81
|
+
},
|
|
82
|
+
{ auto: true },
|
|
83
|
+
],
|
|
36
84
|
site: ['', { option: true, scope: 'worker' }],
|
|
37
85
|
browserContexts: [1, { option: true, scope: 'worker' }],
|
|
38
86
|
row: [undefined, { option: true, scope: 'worker' }],
|
|
39
87
|
visual: [false, { option: true, scope: 'worker' }],
|
|
40
|
-
/** Taken before any stack hold, so a worker waiting for a seat holds nothing another waits on. */
|
|
41
|
-
browserSeat: [
|
|
42
|
-
async ({ browserName, browserContexts, visual }, provide) => {
|
|
43
|
-
if (!servedByImage(browserName, visual) || process.env[HOST_ENV] === undefined) {
|
|
44
|
-
await provide(false);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const release = await holdBrowserSeat(browserContexts);
|
|
48
|
-
try {
|
|
49
|
-
await provide(true);
|
|
50
|
-
}
|
|
51
|
-
finally {
|
|
52
|
-
release();
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
// Unbounded, as each seat's holder is a worker whose tests run under their own timeouts.
|
|
56
|
-
{ scope: 'worker', timeout: 0 },
|
|
57
|
-
],
|
|
58
88
|
stack: [
|
|
59
89
|
async ({ site }, provide) => {
|
|
60
90
|
const handoff = process.env[STACK_ENV];
|
|
@@ -69,13 +99,14 @@ export const apiTest = base.extend({
|
|
|
69
99
|
{ scope: 'worker' },
|
|
70
100
|
],
|
|
71
101
|
stackHold: [
|
|
72
|
-
async ({ site
|
|
102
|
+
async ({ site }, provide, testInfo) => {
|
|
73
103
|
const owns = testInfo.tags.includes(EXCLUSIVE);
|
|
74
104
|
if (site === '' || process.env[HOST_ENV] === undefined) {
|
|
75
105
|
await provide(owns);
|
|
76
106
|
return;
|
|
77
107
|
}
|
|
78
|
-
const release = await holdStack(owns ? 'own' : 'share', site);
|
|
108
|
+
const release = await waitedFor(async () => holdStack(owns ? 'own' : 'share', site));
|
|
109
|
+
announceTimeout(testInfo.timeout);
|
|
79
110
|
try {
|
|
80
111
|
await provide(owns);
|
|
81
112
|
}
|
|
@@ -87,11 +118,11 @@ export const apiTest = base.extend({
|
|
|
87
118
|
// under its own timeout, whose end gives the hold back.
|
|
88
119
|
{ auto: true, timeout: 0 },
|
|
89
120
|
],
|
|
90
|
-
});
|
|
121
|
+
}));
|
|
91
122
|
/** A browser the Linux image's server runs, where the stack host started one. */
|
|
92
123
|
const servedByImage = (browserName, visual) => (visual || browserName === 'webkit') && process.env[LINUX_ENV] !== undefined;
|
|
93
124
|
/** A test on a matrix row: its browser, its page and the invariants every page holds. */
|
|
94
|
-
export const test = apiTest.extend({
|
|
125
|
+
export const test = followingSlow(apiTest.extend({
|
|
95
126
|
cdpPort: [
|
|
96
127
|
async ({ browserName, visual }, provide) => {
|
|
97
128
|
// The visual projects' Chromium runs in the container, its DevTools port out of reach.
|
|
@@ -108,16 +139,17 @@ export const test = apiTest.extend({
|
|
|
108
139
|
* container the stack host starts; baselines match only the architecture that drew them.
|
|
109
140
|
*/
|
|
110
141
|
connectOptions: [
|
|
111
|
-
async ({ browserName, visual
|
|
142
|
+
async ({ browserName, visual }, provide) => {
|
|
112
143
|
if (visual && arch() !== BASELINE_ARCH) {
|
|
113
144
|
throw new Error(`The baselines were drawn on ${BASELINE_ARCH} and this machine is ${arch()}: its Linux image renders differently, so the visual projects run on ${BASELINE_ARCH} alone`);
|
|
114
145
|
}
|
|
115
146
|
const remote = visual || browserName === 'webkit';
|
|
116
|
-
const wsEndpoint = remote ? process.env[LINUX_ENV] : undefined;
|
|
147
|
+
const wsEndpoint = remote ? endpointOf(browserName, process.env[LINUX_ENV]) : undefined;
|
|
117
148
|
if (remote && (visual || platform() === 'darwin') && wsEndpoint === undefined) {
|
|
118
149
|
throw new Error('WebKit on macOS and the visual projects run only in the Linux image: its setup project starts it');
|
|
119
150
|
}
|
|
120
|
-
|
|
151
|
+
// The image's browser reaches the host's loopback through the host's proxy (stack/socks.ts).
|
|
152
|
+
await provide(wsEndpoint === undefined ? undefined : { wsEndpoint });
|
|
121
153
|
},
|
|
122
154
|
{ scope: 'worker' },
|
|
123
155
|
],
|
|
@@ -138,8 +170,8 @@ export const test = apiTest.extend({
|
|
|
138
170
|
baseURL: async ({ stack }, provide) => {
|
|
139
171
|
await provide(stack.baseURL);
|
|
140
172
|
},
|
|
141
|
-
/** The test's context,
|
|
142
|
-
context: async ({
|
|
173
|
+
/** The test's context, made once its stack hold, seats and CPU turn are held; named to the edge. */
|
|
174
|
+
context: async ({ cpuTurn: _turn, context, row, stack }, provide, testInfo) => {
|
|
143
175
|
if (testInfo.tags.includes(API)) {
|
|
144
176
|
throw new Error(`an ${API} test makes no page: it is written with apiTest`);
|
|
145
177
|
}
|
|
@@ -184,17 +216,41 @@ export const test = apiTest.extend({
|
|
|
184
216
|
channels: [{}, { option: true }],
|
|
185
217
|
reconnect: [undefined, { option: true }],
|
|
186
218
|
keyboardOnly: [false, { option: true }],
|
|
187
|
-
/**
|
|
188
|
-
*
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
219
|
+
/** Taken after the stack hold, so every holder is a test with its stack, and before the CPU
|
|
220
|
+
* turn, which a holder may wait on: a test waiting for seats holds no turn. The wait is not the
|
|
221
|
+
* test's, and fails should the seats stand still (stack/lock.ts). */
|
|
222
|
+
browserSeat: [
|
|
223
|
+
async ({ stackHold: _held, browserName, browserContexts, visual }, provide, testInfo) => {
|
|
224
|
+
if (!servedByImage(browserName, visual) || process.env[HOST_ENV] === undefined) {
|
|
225
|
+
await provide(false);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const release = await waitedFor(async () => holdBrowserSeat(browserContexts));
|
|
229
|
+
announceTimeout(testInfo.timeout);
|
|
230
|
+
try {
|
|
231
|
+
await provide(true);
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
release();
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
{ timeout: 0 },
|
|
238
|
+
],
|
|
239
|
+
/** A CPU turn, taken last as every turn is, spans the test's own work; its wait is not the
|
|
240
|
+
* test's. */
|
|
241
|
+
cpuTurn: [
|
|
242
|
+
async ({ browserSeat: _seated }, provide, testInfo) => {
|
|
243
|
+
const release = await waitedFor(holdTestTurn);
|
|
244
|
+
announceTimeout(testInfo.timeout);
|
|
245
|
+
try {
|
|
246
|
+
await provide(true);
|
|
247
|
+
}
|
|
248
|
+
finally {
|
|
249
|
+
release();
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
{ auto: true, timeout: 0 },
|
|
253
|
+
],
|
|
198
254
|
meter: [
|
|
199
255
|
async ({ page, stack, channels, reconnect }, provide) => {
|
|
200
256
|
const options = { apiPrefix: stack.apiPrefix, channels, vitals: false, reconnect };
|
|
@@ -226,6 +282,6 @@ export const test = apiTest.extend({
|
|
|
226
282
|
},
|
|
227
283
|
{ auto: true },
|
|
228
284
|
],
|
|
229
|
-
});
|
|
285
|
+
}));
|
|
230
286
|
export { expect } from '@playwright/test';
|
|
231
287
|
//# sourceMappingURL=fixtures.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../testing/src/fixtures.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../testing/src/fixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// A workspace's tests as `node --test` runs them (its arguments: globs and `--import <module>`),
|
|
3
|
-
// those timing code then alone, one at a time
|
|
4
|
-
// KIT_TEST_PHASE=untimed or timed takes one phase, so the
|
|
3
|
+
// those timing code then alone, one at a time, holding the machine's CPU gate whole; the rest
|
|
4
|
+
// under coverage, held to its floors. KIT_TEST_PHASE=untimed or timed takes one phase, so the
|
|
5
|
+
// timed run can have the machine alone.
|
|
5
6
|
import { finished, pipeline } from 'node:stream/promises';
|
|
6
7
|
import { run } from 'node:test';
|
|
7
8
|
import { spec as SpecReporter } from 'node:test/reporters';
|
|
8
9
|
import { parseArgs } from 'node:util';
|
|
10
|
+
import { inWholeTurn } from '../stack/gate-member.js';
|
|
11
|
+
import { GATE_PORT } from '../stack/gate-server.js';
|
|
9
12
|
import { holdFloors } from './hold.js';
|
|
10
13
|
import { measuredOnce } from './instances.js';
|
|
11
14
|
import { PHASE_ENV, phaseOf, testFiles } from './timed.js';
|
|
@@ -47,6 +50,11 @@ const measure = async () => {
|
|
|
47
50
|
return measured;
|
|
48
51
|
};
|
|
49
52
|
const name = process.env['npm_package_name'] ?? cwd;
|
|
53
|
+
/** The CPU gate's port: the machine's own, or the one a test of this runner serves. */
|
|
54
|
+
const GATE_PORT_ENV = 'KIT_CPU_GATE_PORT';
|
|
55
|
+
/** Runs the timed files one at a time, holding every slot of the machine's CPU gate: the tests of
|
|
56
|
+
* other runs, which take their turns there, wait, so none shares the cores they're timed on. */
|
|
57
|
+
const timedPass = async (files) => inWholeTurn(async () => passes(files, false), `the timed tests of ${name} (pid ${String(process.pid)})`, Number(process.env[GATE_PORT_ENV] ?? GATE_PORT));
|
|
50
58
|
const phase = phaseOf(process.env[PHASE_ENV]);
|
|
51
59
|
const untimed = phase !== 'timed';
|
|
52
60
|
const timedToo = phase !== 'untimed';
|
|
@@ -59,6 +67,6 @@ if (!untimed) {
|
|
|
59
67
|
}
|
|
60
68
|
// A timed test shares no CPU with the others: it runs once they are done, and on its own.
|
|
61
69
|
const passed = (!untimed || (await passes(parallel, true))) &&
|
|
62
|
-
(!timedToo || timed.length === 0 || (await
|
|
70
|
+
(!timedToo || timed.length === 0 || (await timedPass(timed)));
|
|
63
71
|
process.exitCode = passed && (!untimed || holdFloors(name, cwd, await measure())) ? 0 : 1;
|
|
64
72
|
//# sourceMappingURL=node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../testing/src/floors/node.ts"],"names":[],"mappings":";AACA,iGAAiG;AACjG,
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../testing/src/floors/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import type { Service } from './process.ts';
|
|
2
2
|
import type { ContainerSpec } from './runtime.ts';
|
|
3
|
+
/** The engines the image serves, one browser each: the visual projects' Chromium, and WebKit for
|
|
4
|
+
* the rows macOS can't run it on. */
|
|
5
|
+
declare const ENGINES: readonly ['chromium', 'webkit'];
|
|
6
|
+
type Engine = (typeof ENGINES)[number];
|
|
7
|
+
/** Where each engine's browser is served, by engine. */
|
|
8
|
+
type Endpoints = Readonly<Record<Engine, string>>;
|
|
3
9
|
export interface BrowserServer extends Service {
|
|
4
|
-
readonly
|
|
10
|
+
readonly endpoints: Endpoints;
|
|
5
11
|
}
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
12
|
+
/** The endpoint of the image's browser for `engine` in `given`, the stack host's variable; none
|
|
13
|
+
* where the variable is unset or names no such engine. */
|
|
14
|
+
export declare const endpointOf: (engine: string, given?: string) => string | undefined;
|
|
15
|
+
/** Browser contexts the image serves at once, a seat each, taken by a test for its own time: each
|
|
16
|
+
* engine's one browser is shared by every worker, so a connection costs nothing. */
|
|
8
17
|
export declare const BROWSER_SEATS = 4;
|
|
9
18
|
/** A test's devices against the `declared` contexts it may have open, its own included: each is
|
|
10
19
|
* counted as it is asked for, so devices asked for together through Promise.all are all counted. */
|
|
@@ -23,4 +32,5 @@ export declare const browserServerSpec: (core: {
|
|
|
23
32
|
/** Playwright's browsers in its official Linux image, served to the host's tests so screenshots
|
|
24
33
|
* render the same on every machine, trusting the local CA in `caDir` that signs every edge. */
|
|
25
34
|
export declare const startBrowserServer: (signal: AbortSignal, caDir?: string) => Promise<BrowserServer>;
|
|
35
|
+
export {};
|
|
26
36
|
//# sourceMappingURL=browsers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browsers.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/browsers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"browsers.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/browsers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD;sCACsC;AACtC,QAAA,MAAM,OAAO,YAAI,UAAU,EAAE,QAAQ,CAAU,CAAC;AAEhD,KAAK,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAKvC,wDAAwD;AACxD,KAAK,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAElD,MAAM,WAAW,aAAc,SAAQ,OAAO;IAC5C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED;2DAC2D;AAC3D,eAAO,MAAM,UAAU,WAAY,MAAM,UAAU,MAAM,KAAG,MAAM,GAAG,SAIpE,CAAC;AAEF;qFACqF;AACrF,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B;qGACqG;AACrG,eAAO,MAAM,YAAY,aAAc,MAAM,KAAG,CAAC,MAAM,MAAM,IAAI,CAiBhE,CAAC;AAMF,qFAAqF;AACrF,eAAO,MAAM,cAAc,QAAO;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CASlF,CAAC;AAiEF;8CAC8C;AAC9C,eAAO,MAAM,iBAAiB,SACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,MACrD,MAAM,KACT,aAWD,CAAC;AAyBH;gGACgG;AAChG,eAAO,MAAM,kBAAkB,WACrB,WAAW,qBAElB,OAAO,CAAC,aAAa,CA4BvB,CAAC"}
|
|
@@ -3,11 +3,23 @@ import { createRequire } from 'node:module';
|
|
|
3
3
|
import { availableParallelism } from 'node:os';
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { isObject } from '../unknown.js';
|
|
6
|
-
import { container } from './containers.js';
|
|
6
|
+
import { container, exec, networkOf } from './containers.js';
|
|
7
|
+
import { startSocks } from './socks.js';
|
|
7
8
|
import { LOCAL_CA_DIR, localCaCertificate } from './tls.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
/** The engines the image serves, one browser each: the visual projects' Chromium, and WebKit for
|
|
10
|
+
* the rows macOS can't run it on. */
|
|
11
|
+
const ENGINES = ['chromium', 'webkit'];
|
|
12
|
+
/** Each engine's browser on a port of its own, at a path named for it. */
|
|
13
|
+
const PORTS = { chromium: 3000, webkit: 3001 };
|
|
14
|
+
/** The endpoint of the image's browser for `engine` in `given`, the stack host's variable; none
|
|
15
|
+
* where the variable is unset or names no such engine. */
|
|
16
|
+
export const endpointOf = (engine, given) => {
|
|
17
|
+
const parsed = given === undefined ? undefined : JSON.parse(given);
|
|
18
|
+
const endpoint = isObject(parsed) ? parsed[engine] : undefined;
|
|
19
|
+
return typeof endpoint === 'string' ? endpoint : undefined;
|
|
20
|
+
};
|
|
21
|
+
/** Browser contexts the image serves at once, a seat each, taken by a test for its own time: each
|
|
22
|
+
* engine's one browser is shared by every worker, so a connection costs nothing. */
|
|
11
23
|
export const BROWSER_SEATS = 4;
|
|
12
24
|
/** A test's devices against the `declared` contexts it may have open, its own included: each is
|
|
13
25
|
* counted as it is asked for, so devices asked for together through Promise.all are all counted. */
|
|
@@ -27,8 +39,8 @@ export const deviceBudget = (declared) => {
|
|
|
27
39
|
};
|
|
28
40
|
};
|
|
29
41
|
};
|
|
30
|
-
/** A browser costs about 225 MiB and a context about 460
|
|
31
|
-
*
|
|
42
|
+
/** A browser costs about 225 MiB and a context about 460, so the two browsers and a full pool's
|
|
43
|
+
* contexts come to about 2,290 MiB of these 3,328: a VM keeps what it touched. */
|
|
32
44
|
const MACHINE = { memory: 3328, cpus: availableParallelism() };
|
|
33
45
|
/** The playwright-core the tests run, mounted into the image of the same release. */
|
|
34
46
|
export const playwrightCore = () => {
|
|
@@ -46,32 +58,123 @@ const LOG_FILE = '/tmp/browsers.log';
|
|
|
46
58
|
/** The local CA in the image's store, which WebKit reads, and Node by NODE_EXTRA_CA_CERTS: the
|
|
47
59
|
* server's Node makes a context's own requests, as `route.fetch` and `context.request` do. */
|
|
48
60
|
const CA_FILE = '/usr/local/share/ca-certificates/tonalisk-kit-edge.crt';
|
|
49
|
-
/**
|
|
61
|
+
/** The pipe the host writes the proxy's address to, once it listens, and the IPv6 address the
|
|
62
|
+
* container's network gives it: only then may the browsers launch, as each takes its proxy at its
|
|
63
|
+
* launch. */
|
|
64
|
+
const PROXY_PIPE = '/tmp/proxy';
|
|
65
|
+
/** Launches each engine's browser behind the host's proxy, serving it to every worker. A browser
|
|
66
|
+
* that crashes fails the tests it was serving, as one per worker did, and is launched again at
|
|
67
|
+
* the same address for the workers that follow. On the container's stop, Playwright closes each
|
|
68
|
+
* browser and keeps the process; it exits once both are closed, launching none again. */
|
|
69
|
+
const SERVE = `
|
|
70
|
+
const playwright = require('/playwright-core');
|
|
71
|
+
const engines = ${JSON.stringify(Object.entries(PORTS))};
|
|
72
|
+
const proxy = { server: process.env.PROXY };
|
|
73
|
+
const state = { stopping: false, open: engines.length };
|
|
74
|
+
// A browser launched before its network has given the container its IPv6 address hears the
|
|
75
|
+
// address arrive as a network change, and Chromium fails the navigations it has open
|
|
76
|
+
// (ERR_NETWORK_CHANGED): the browsers launch once it's there, or after 30 s without it.
|
|
77
|
+
const settled = async (left = 300) => {
|
|
78
|
+
const wanted = process.env.SETTLED;
|
|
79
|
+
const addresses = Object.values(require('node:os').networkInterfaces()).flat();
|
|
80
|
+
if (!wanted || left === 0 || addresses.some((one) => one.address === wanted)) return;
|
|
81
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
82
|
+
await settled(left - 1);
|
|
83
|
+
};
|
|
84
|
+
process.once('SIGTERM', () => { state.stopping = true; });
|
|
85
|
+
const failed = (error) => { console.error(error); process.exit(1); };
|
|
86
|
+
const serve = async ([engine, port]) => {
|
|
87
|
+
const server = await playwright[engine].launchServer({ port, host: '0.0.0.0', wsPath: '/' + engine, proxy });
|
|
88
|
+
server.once('close', () => {
|
|
89
|
+
if (state.stopping) {
|
|
90
|
+
state.open -= 1;
|
|
91
|
+
if (state.open === 0) process.exit(0);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
console.log(engine + ' closed, launched again');
|
|
95
|
+
serve([engine, port]).catch(failed);
|
|
96
|
+
});
|
|
97
|
+
console.log(engine + ' serves ' + server.wsEndpoint());
|
|
98
|
+
};
|
|
99
|
+
(async () => {
|
|
100
|
+
await settled();
|
|
101
|
+
for (const entry of engines) await serve(entry);
|
|
102
|
+
})().catch(failed);
|
|
103
|
+
`;
|
|
104
|
+
/** Takes the local CA's certificate into the image's store, waits for the proxy's address, then
|
|
105
|
+
* serves. A pipe the host wrote first is a plain file, which reads as well. */
|
|
50
106
|
const TRUSTED_SERVER = [
|
|
51
107
|
String.raw `printf "%s\n" "$EDGE_CA" > ${CA_FILE}`,
|
|
52
108
|
'update-ca-certificates > /dev/null',
|
|
53
|
-
`
|
|
109
|
+
`{ mkfifo ${PROXY_PIPE} 2> /dev/null || true; }`,
|
|
110
|
+
`{ read -r PROXY && read -r SETTLED; } < ${PROXY_PIPE}`,
|
|
111
|
+
'export PROXY SETTLED',
|
|
112
|
+
`exec node -e "$1" > ${LOG_FILE} 2>&1`,
|
|
54
113
|
].join(' && ');
|
|
55
114
|
/** The image serving `core`'s browsers, trusting the CA in `ca`: a certificate passed in its
|
|
56
115
|
* environment, so no key is ever mounted. */
|
|
57
116
|
export const browserServerSpec = (core, ca) => ({
|
|
58
117
|
image: `mcr.microsoft.com/playwright:v${core.version}-noble`,
|
|
59
|
-
ports:
|
|
60
|
-
ready:
|
|
118
|
+
ports: Object.values(PORTS),
|
|
119
|
+
ready: ENGINES.map((engine) => `${engine} serves`),
|
|
61
120
|
logFile: LOG_FILE,
|
|
62
121
|
env: { EDGE_CA: ca, NODE_EXTRA_CA_CERTS: CA_FILE },
|
|
63
122
|
init: true,
|
|
64
123
|
sharesMemory: true,
|
|
65
124
|
machine: MACHINE,
|
|
66
125
|
files: [core.root, '/playwright-core'],
|
|
67
|
-
command: ['sh', '-c', TRUSTED_SERVER],
|
|
126
|
+
command: ['sh', '-c', TRUSTED_SERVER, 'sh', SERVE],
|
|
68
127
|
});
|
|
128
|
+
/** Starts the host's proxy for the container `id`, on the host's address on its network and for
|
|
129
|
+
* its address alone, and gives the browsers its address. */
|
|
130
|
+
const proxyFor = async (id, signal) => {
|
|
131
|
+
const { own, host, settled = '' } = await networkOf(id);
|
|
132
|
+
const socks = await startSocks({ host, peer: own });
|
|
133
|
+
try {
|
|
134
|
+
const address = `socks5://${host}:${String(socks.port)}`;
|
|
135
|
+
const told = [
|
|
136
|
+
'sh',
|
|
137
|
+
'-c',
|
|
138
|
+
`printf "%s\\n%s\\n" "$1" "$2" > ${PROXY_PIPE}`,
|
|
139
|
+
'sh',
|
|
140
|
+
address,
|
|
141
|
+
settled,
|
|
142
|
+
];
|
|
143
|
+
await exec(id, told, signal);
|
|
144
|
+
return socks;
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
await socks.stop();
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
69
151
|
/** Playwright's browsers in its official Linux image, served to the host's tests so screenshots
|
|
70
152
|
* render the same on every machine, trusting the local CA in `caDir` that signs every edge. */
|
|
71
153
|
export const startBrowserServer = async (signal, caDir = LOCAL_CA_DIR) => {
|
|
72
154
|
const ca = await localCaCertificate(caDir, signal);
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
|
|
155
|
+
const proxied = {};
|
|
156
|
+
const started = async (id) => {
|
|
157
|
+
proxied.socks = await proxyFor(id, signal);
|
|
158
|
+
};
|
|
159
|
+
const stopProxy = async () => {
|
|
160
|
+
if (proxied.socks !== undefined) {
|
|
161
|
+
await proxied.socks.stop();
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
const server = await container(browserServerSpec(playwrightCore(), ca), signal, started).catch(async (error) => {
|
|
165
|
+
await stopProxy();
|
|
166
|
+
throw error;
|
|
167
|
+
});
|
|
168
|
+
const endpointFor = (engine) => {
|
|
169
|
+
const { host, port } = server.address(PORTS[engine]);
|
|
170
|
+
return `ws://${host}:${String(port)}/${engine}`;
|
|
171
|
+
};
|
|
172
|
+
return {
|
|
173
|
+
endpoints: { chromium: endpointFor('chromium'), webkit: endpointFor('webkit') },
|
|
174
|
+
stop: async () => {
|
|
175
|
+
await server.stop();
|
|
176
|
+
await stopProxy();
|
|
177
|
+
},
|
|
178
|
+
};
|
|
76
179
|
};
|
|
77
180
|
//# sourceMappingURL=browsers.js.map
|