mirror of
https://github.com/garrytan/gstack.git
synced 2026-08-31 18:30:39 +02:00
fix(test): per-shard CHROMIUM_PROFILE — the collision class duration packing exposed
Nine test files launch in-process persistent contexts or daemons that default to the SHARED ~/.gstack/chromium-profile. Two concurrent shard processes on one profile dir kill each other's browser — observed live on CI once duration packing recomposed shards: handoff's launchPersistentContext died 'Target page, context or browser has been closed' (--user-data-dir=~/.gstack/chromium-profile in the call log) while a sibling shard's daemon logged 'Chromium process crashed'. Hash sharding had masked the collision by chance placement; handoff passes standalone everywhere. Fix at the runner, not per file: each shard child gets CHROMIUM_PROFILE=<shard-state>/chromium-profile (the documented env knob, same isolation idea as the existing per-shard TMPDIR). Files within a shard run serially, so sharing the per-shard profile is safe; config.test's resolution-order tests save/restore the env around their assertions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1111,6 +1111,17 @@ export async function runFreeShard(
|
|||||||
env.TMPDIR = childTmp;
|
env.TMPDIR = childTmp;
|
||||||
env.TEMP = childTmp;
|
env.TEMP = childTmp;
|
||||||
env.TMP = childTmp;
|
env.TMP = childTmp;
|
||||||
|
// Per-shard Chromium profile (same isolation idea as TMPDIR): nine test
|
||||||
|
// files launch in-process persistent contexts or daemons that default to
|
||||||
|
// the SHARED ~/.gstack/chromium-profile, and two concurrent shards on one
|
||||||
|
// profile dir kill each other's browser — observed live on CI once
|
||||||
|
// duration packing recomposed shards (handoff's launchPersistentContext
|
||||||
|
// died "Target page, context or browser has been closed" while a sibling
|
||||||
|
// shard's daemon logged "Chromium process crashed"). Hash sharding had
|
||||||
|
// masked the collision by chance placement. Within a shard, files run
|
||||||
|
// serially, so sharing the per-shard profile is safe; config tests that
|
||||||
|
// assert resolution order save/restore this env around their assertions.
|
||||||
|
env.CHROMIUM_PROFILE = path.join(stateDir, 'chromium-profile');
|
||||||
|
|
||||||
const startedAt = Date.now();
|
const startedAt = Date.now();
|
||||||
const child = spawn(command, args, {
|
const child = spawn(command, args, {
|
||||||
|
|||||||
Reference in New Issue
Block a user