@tonalisk-labs/kit 1.0.1 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/testing/src/config-coverage.d.ts.map +1 -1
  2. package/dist/testing/src/config-coverage.js +3 -2
  3. package/dist/testing/src/config-coverage.js.map +1 -1
  4. package/dist/testing/src/fixtures.d.ts +9 -3
  5. package/dist/testing/src/fixtures.d.ts.map +1 -1
  6. package/dist/testing/src/fixtures.js +98 -42
  7. package/dist/testing/src/fixtures.js.map +1 -1
  8. package/dist/testing/src/floors/node.js +11 -3
  9. package/dist/testing/src/floors/node.js.map +1 -1
  10. package/dist/testing/src/stack/browsers.d.ts +13 -3
  11. package/dist/testing/src/stack/browsers.d.ts.map +1 -1
  12. package/dist/testing/src/stack/browsers.js +117 -14
  13. package/dist/testing/src/stack/browsers.js.map +1 -1
  14. package/dist/testing/src/stack/containers.d.ts +6 -2
  15. package/dist/testing/src/stack/containers.d.ts.map +1 -1
  16. package/dist/testing/src/stack/containers.js +8 -1
  17. package/dist/testing/src/stack/containers.js.map +1 -1
  18. package/dist/testing/src/stack/control.d.ts +18 -3
  19. package/dist/testing/src/stack/control.d.ts.map +1 -1
  20. package/dist/testing/src/stack/control.js +50 -10
  21. package/dist/testing/src/stack/control.js.map +1 -1
  22. package/dist/testing/src/stack/gate-member.d.ts +10 -0
  23. package/dist/testing/src/stack/gate-member.d.ts.map +1 -1
  24. package/dist/testing/src/stack/gate-member.js +68 -7
  25. package/dist/testing/src/stack/gate-member.js.map +1 -1
  26. package/dist/testing/src/stack/gate-server.d.ts +37 -4
  27. package/dist/testing/src/stack/gate-server.d.ts.map +1 -1
  28. package/dist/testing/src/stack/gate-server.js +124 -12
  29. package/dist/testing/src/stack/gate-server.js.map +1 -1
  30. package/dist/testing/src/stack/hold.d.ts +24 -3
  31. package/dist/testing/src/stack/hold.d.ts.map +1 -1
  32. package/dist/testing/src/stack/hold.js +136 -11
  33. package/dist/testing/src/stack/hold.js.map +1 -1
  34. package/dist/testing/src/stack/host.d.ts.map +1 -1
  35. package/dist/testing/src/stack/host.js +26 -6
  36. package/dist/testing/src/stack/host.js.map +1 -1
  37. package/dist/testing/src/stack/lock.d.ts +15 -4
  38. package/dist/testing/src/stack/lock.d.ts.map +1 -1
  39. package/dist/testing/src/stack/lock.js +47 -18
  40. package/dist/testing/src/stack/lock.js.map +1 -1
  41. package/dist/testing/src/stack/preview-child.js +14 -3
  42. package/dist/testing/src/stack/preview-child.js.map +1 -1
  43. package/dist/testing/src/stack/runtime-apple.d.ts.map +1 -1
  44. package/dist/testing/src/stack/runtime-apple.js +16 -0
  45. package/dist/testing/src/stack/runtime-apple.js.map +1 -1
  46. package/dist/testing/src/stack/runtime-docker.d.ts +2 -1
  47. package/dist/testing/src/stack/runtime-docker.d.ts.map +1 -1
  48. package/dist/testing/src/stack/runtime-docker.js +29 -3
  49. package/dist/testing/src/stack/runtime-docker.js.map +1 -1
  50. package/dist/testing/src/stack/runtime.d.ts +10 -0
  51. package/dist/testing/src/stack/runtime.d.ts.map +1 -1
  52. package/dist/testing/src/stack/runtime.js +1 -0
  53. package/dist/testing/src/stack/runtime.js.map +1 -1
  54. package/dist/testing/src/stack/socks.d.ts +25 -0
  55. package/dist/testing/src/stack/socks.d.ts.map +1 -0
  56. package/dist/testing/src/stack/socks.js +195 -0
  57. package/dist/testing/src/stack/socks.js.map +1 -0
  58. package/dist/testing/src/stack/stall.d.ts +36 -0
  59. package/dist/testing/src/stack/stall.d.ts.map +1 -0
  60. package/dist/testing/src/stack/stall.js +93 -0
  61. package/dist/testing/src/stack/stall.js.map +1 -0
  62. package/package.json +4 -4
  63. package/testing/src/config-coverage.ts +3 -2
  64. package/testing/src/fixtures.ts +277 -197
  65. package/testing/src/floors/node.ts +19 -3
  66. package/testing/src/stack/browsers.ts +129 -15
  67. package/testing/src/stack/containers.ts +14 -2
  68. package/testing/src/stack/control.ts +62 -11
  69. package/testing/src/stack/gate-member.ts +90 -8
  70. package/testing/src/stack/gate-server.ts +166 -21
  71. package/testing/src/stack/hold.ts +163 -11
  72. package/testing/src/stack/host.ts +32 -9
  73. package/testing/src/stack/lock.ts +61 -21
  74. package/testing/src/stack/preview-child.ts +21 -4
  75. package/testing/src/stack/runtime-apple.ts +20 -1
  76. package/testing/src/stack/runtime-docker.ts +47 -3
  77. package/testing/src/stack/runtime.ts +11 -0
  78. package/testing/src/stack/socks.ts +233 -0
  79. package/testing/src/stack/stall.ts +145 -0
@@ -1 +1 @@
1
- {"version":3,"file":"config-coverage.d.ts","sourceRoot":"","sources":["../../../testing/src/config-coverage.ts"],"names":[],"mappings":"AAOA,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
+ {"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
- const COVERS = /^\s*(?:\/\/|\*)\s*Covers:\s*(?<keys>.+)$/gmu;
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,wFAAwF;AACxF,MAAM,MAAM,GAAG,6CAA6C,CAAC;AAE7D,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"}
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 with `test.use`. */
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;AAc3E,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;kGAC8F;IAC9F,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAQD,UAAU,mBAAmB;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,wFAAwF;IACxF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,aAAa;IACrB,4FAA4F;IAC5F,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,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,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,CAsD1C,CAAC;AAMH,yFAAyF;AACzF,eAAO,MAAM,IAAI,EAAE,QAAQ,CACzB,QAAQ,GAAG,aAAa,GAAG,YAAY,EACvC,UAAU,GAAG,OAAO,GAAG,mBAAmB,GAAG,cAAc,CAmJ3D,CAAC;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,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, browserSeat: _seated }, provide, testInfo) => {
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, browserSeat: _seated }, provide) => {
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
- await provide(wsEndpoint === undefined ? undefined : { wsEndpoint, exposeNetwork: '<loopback>' });
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, used once its stack hold and CPU turn are held; named to the edge. */
142
- context: async ({ stackHold: _held, context, row, stack }, provide, testInfo) => {
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
- /** A CPU turn, taken after the stack hold as every turn is, spans the test's own work; the
188
- * override keeps the hold's own timeout, so none of the wait is charged to the test's. */
189
- stackHold: async ({ stackHold }, provide) => {
190
- const release = await holdTestTurn();
191
- try {
192
- await provide(stackHold);
193
- }
194
- finally {
195
- release();
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; the rest under coverage, held to its floors.
4
- // KIT_TEST_PHASE=untimed or timed takes one phase, so the timed run can have the machine alone.
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 passes(timed, false)));
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":"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"}
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 wsEndpoint: string;
10
+ readonly endpoints: Endpoints;
5
11
  }
6
- /** Browser contexts the image serves at once, a seat each: 4 in one browser peak at 2,272 MiB, 4
7
- * browsers of one each at 2,947, and neither stalls nor is killed. */
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;AAGlD,MAAM,WAAW,aAAc,SAAQ,OAAO;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAID;uEACuE;AACvE,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;AAgBF;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;AAEH;gGACgG;AAChG,eAAO,MAAM,kBAAkB,WACrB,WAAW,qBAElB,OAAO,CAAC,aAAa,CAKvB,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
- const PORT = 3000;
9
- /** Browser contexts the image serves at once, a seat each: 4 in one browser peak at 2,272 MiB, 4
10
- * browsers of one each at 2,947, and neither stalls nor is killed. */
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; the worst full pool, 4 browsers, peaked
31
- * at 2,947 MiB of these 3,328 with no stall: a VM keeps what it touched. */
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
- /** Takes the local CA's certificate into the image's store, then serves. */
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
- `exec node /playwright-core/cli.js run-server --port ${String(PORT)} --host 0.0.0.0 > ${LOG_FILE} 2>&1`,
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: [PORT],
60
- ready: ['Listening on'],
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 server = await container(browserServerSpec(playwrightCore(), ca), signal);
74
- const { host, port } = server.address(PORT);
75
- return { wsEndpoint: `ws://${host}:${String(port)}/`, stop: server.stop };
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