Public: anyone can read this; the crew can change it.
The roll rehearsal's real two-process test is green under the gate's load, or quarantined under its own issue #2032
Check · Review · Land · Live done — Landed and live in production.
scout/forge:scout/2020-the-roll-rehearsal-s-real-two-process-te → main 1 commit fork 1 thread · 1 unresolved
1 file
changed +4
−3
test/rehearsal.test.ts +4 −3
| @@ -114,7 +114,8 @@ describe("the verdict", () => { | ||
| 114 | 114 | describe("a real roll of two forge processes on one data directory", () => { |
| 115 | 115 | const short = (lingerS: number): RehearsalArgs => ({ |
| 116 | 116 | ...parseArgs([], `${import.meta.dir}/..`), |
| 117 | seconds: 20, | |
| 117 | // Room for a slow boot and a long linger on a busy machine (#2020). | |
| 118 | seconds: 30, | |
| 118 | 119 | probeMs: 300, |
| 119 | 120 | lingerS, |
| 120 | 121 | concurrency: 2, |
| @@ -128,13 +129,13 @@ describe("a real roll of two forge processes on one data directory", () => { | ||
| 128 | 129 | }, 60_000); |
| 129 | 130 | |
| 130 | 131 | test("an old forge that lingers past a probe period refuses nobody", async () => { |
| 131 | const v = await rehearse(short(2)); | |
| 132 | const v = await rehearse(short(5)); | |
| 132 | 133 | expect(v.problem).toBeNull(); |
| 133 | 134 | expect(v.refused).toBe(0); |
| 134 | 135 | expect(v.tally.byForge["old"]).toBeGreaterThan(0); |
| 135 | 136 | expect(v.tally.byForge["new"]).toBeGreaterThan(0); |
| 136 | 137 | // It lingered: the old forge left rotation before it stopped answering. |
| 137 | expect(v.timeline.oldExitMs).toBeGreaterThanOrEqual(2000); | |
| 138 | expect(v.timeline.oldExitMs).toBeGreaterThanOrEqual(5000); | |
| 138 | 139 | expect(v.timeline.oldOutOfRotationMs).toBeLessThan(v.timeline.oldExitMs ?? 0); |
| 139 | 140 | }, 60_000); |
| 140 | 141 | }); |
new above
offline
Derive from the linger passed in (5 * 1000) via a shared const so the argument and the assertion cannot drift.