fix(tests): prevent playwrigt test to load default .env
This commit is contained in:
@@ -0,0 +1,24 @@
|
|||||||
|
# Intentionally empty config file for test-server startup.
|
||||||
|
#
|
||||||
|
# Used as `--config tests/common/empty.env` by the Playwright
|
||||||
|
# webServer scripts (`tests/e2e/start-server*.sh`). Two properties
|
||||||
|
# it gives us that a bare `cargo run` doesn't:
|
||||||
|
#
|
||||||
|
# 1. Loading an empty file overrides nothing, so every var
|
||||||
|
# Playwright places in the child process env (SERVER_PORT,
|
||||||
|
# STORAGE_PATH, RUST_LOG, OPAQUE_MODE, DPOP_MODE, whatever
|
||||||
|
# per-suite overrides land here) reaches the server intact.
|
||||||
|
#
|
||||||
|
# 2. Passing `--config <anything>` in main.rs takes the
|
||||||
|
# `Some(path)` branch and skips the fallback
|
||||||
|
# `dotenvy::dotenv()` probe of `$CWD/.env`. Without this a
|
||||||
|
# developer's local `.env` (typical:
|
||||||
|
# `OXICLOUD_METRICS_LISTEN=127.0.0.1:9090`) leaks into the
|
||||||
|
# test server via CWD auto-load and clashes with whatever
|
||||||
|
# the dev is already running.
|
||||||
|
#
|
||||||
|
# Hurl API tests use `tests/common/server.env` for --config
|
||||||
|
# instead — they source it in shell first, so file-wins doesn't
|
||||||
|
# matter there. Only Playwright needs the empty-file trick
|
||||||
|
# because it applies per-suite env overrides that would otherwise
|
||||||
|
# be clobbered by server.env's shared values.
|
||||||
@@ -94,6 +94,13 @@ export default defineConfig({
|
|||||||
// so they can sign proofs in-browser. Once landed, this
|
// so they can sign proofs in-browser. Once landed, this
|
||||||
// override goes and Playwright runs production-shape.
|
// override goes and Playwright runs production-shape.
|
||||||
OXICLOUD_DPOP_MODE: 'opportunistic',
|
OXICLOUD_DPOP_MODE: 'opportunistic',
|
||||||
|
// Explicitly clear OXICLOUD_METRICS_LISTEN so a developer's
|
||||||
|
// `.env` value (typical: `127.0.0.1:9090`) doesn't leak in via
|
||||||
|
// the parent-process env Playwright merges here — the test
|
||||||
|
// server would collide with the developer's own running
|
||||||
|
// instance on that port and main.rs would hard-fail. Empty
|
||||||
|
// string is the config-parser's "disabled" sentinel.
|
||||||
|
OXICLOUD_METRICS_LISTEN: '',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -36,5 +36,15 @@ mark "spawning test database…"
|
|||||||
bash "$REPO_ROOT/tests/common/spawn-db.sh"
|
bash "$REPO_ROOT/tests/common/spawn-db.sh"
|
||||||
mark "database ready; starting server…"
|
mark "database ready; starting server…"
|
||||||
|
|
||||||
# Replace the shell with the server process so Playwright's PID tracking works.
|
# Point `--config` at an INTENTIONALLY EMPTY file: blocks the
|
||||||
exec "$@"
|
# CWD `.env` fallback in main.rs (so developer envs don't leak
|
||||||
|
# in) while overriding nothing (so every Playwright-set env var,
|
||||||
|
# including per-suite DPOP/OPAQUE/plugin overrides, reaches the
|
||||||
|
# server intact). See tests/common/empty.env and
|
||||||
|
# tests/e2e/start-server.sh for the full rationale.
|
||||||
|
CONFIG_PATH="$REPO_ROOT/tests/common/empty.env"
|
||||||
|
if [[ "${1:-}" == "cargo" ]]; then
|
||||||
|
exec "$@" -- --config "$CONFIG_PATH"
|
||||||
|
else
|
||||||
|
exec "$@" --config "$CONFIG_PATH"
|
||||||
|
fi
|
||||||
|
|||||||
@@ -36,5 +36,30 @@ mark "spawning test database…"
|
|||||||
bash "$REPO_ROOT/tests/common/spawn-db.sh"
|
bash "$REPO_ROOT/tests/common/spawn-db.sh"
|
||||||
mark "database ready; starting server…"
|
mark "database ready; starting server…"
|
||||||
|
|
||||||
# Replace the shell with the server process so Playwright's PID tracking works.
|
# Point `--config` at an INTENTIONALLY EMPTY file. Two reasons:
|
||||||
exec "$@"
|
#
|
||||||
|
# 1. Blocks the fallback `dotenvy::dotenv()` probe of `$CWD/.env`
|
||||||
|
# in main.rs — otherwise a developer's local `.env`
|
||||||
|
# (typical: `OXICLOUD_METRICS_LISTEN=127.0.0.1:9090`) leaks
|
||||||
|
# into the test server via CWD auto-load and clashes with
|
||||||
|
# anything the dev is already running.
|
||||||
|
#
|
||||||
|
# 2. An empty file has nothing to override — so every var
|
||||||
|
# Playwright loaded into `webServer.env` from server.env AND
|
||||||
|
# every per-suite override on top (SERVER_PORT, STORAGE_PATH,
|
||||||
|
# RUST_LOG, OPAQUE_MODE, DPOP_MODE, …) reaches the server
|
||||||
|
# intact. We can't use `--config server.env` here because
|
||||||
|
# `dotenvy::from_filename_override` would clobber Playwright's
|
||||||
|
# per-suite overrides for the keys it shares with the file.
|
||||||
|
#
|
||||||
|
# See tests/common/empty.env for the header explaining this.
|
||||||
|
CONFIG_PATH="$REPO_ROOT/tests/common/empty.env"
|
||||||
|
|
||||||
|
# `cargo run` needs `--` to separate cargo's own flags from the
|
||||||
|
# binary's — a direct-binary invocation takes them raw. First arg
|
||||||
|
# tells us which we're in.
|
||||||
|
if [[ "${1:-}" == "cargo" ]]; then
|
||||||
|
exec "$@" -- --config "$CONFIG_PATH"
|
||||||
|
else
|
||||||
|
exec "$@" --config "$CONFIG_PATH"
|
||||||
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user