A second run in the same output directory failed its service scenario: the room service's keygen refuses the key file the first run left. Co-Authored-By: Claude Opus 5.5 <[email protected]>
77 lines
3.5 KiB
Shell
Executable file
77 lines
3.5 KiB
Shell
Executable file
#!/bin/bash
|
|
# Build what the browser MoQ client's tests need, and run them.
|
|
#
|
|
# e2e/run.sh [--only compose,webtransport,websocket,goaway,service] [--runs N]
|
|
#
|
|
# 1. joule-moq-relay, joule-moq-room (its own workspace) and wai_live_web (native,
|
|
# release: the test room and the host's composition);
|
|
# 2. joule-moq-web and wai-live-web for wasm32-unknown-unknown, through wasm-bindgen's web
|
|
# target into web/pkg/, each with its own --out-name;
|
|
# 3. the browser-automation package from e2e/package-lock.json (`npm ci --ignore-scripts`:
|
|
# no install script runs), outside the tree unless PLAYWRIGHT_HOST names one installed;
|
|
# 4. the Node unit tests of the page's own modules;
|
|
# 5. e2e/room.e2e.mjs, in the installed browser whose executable BROWSER_BIN names (the
|
|
# CI job names the host's), otherwise the package's own, which PLAYWRIGHT_BROWSERS_PATH
|
|
# must then hold.
|
|
#
|
|
# Environment: CARGO_TARGET_DIR (one target directory for both workspaces), BROWSER_BIN,
|
|
# PLAYWRIGHT_HOST, MOQ_WEB_OUT (where artifacts go), CARGO_LOCKED (default --locked).
|
|
# Nothing listens beyond loopback: the relay and the page server bind 127.0.0.1.
|
|
set -euo pipefail
|
|
HERE=$(cd "$(dirname "$0")" && pwd)
|
|
CRATE=$(cd "$HERE/.." && pwd)
|
|
JC=$(cd "$CRATE/../.." && pwd)
|
|
ROOT=$(cd "$JC/../.." && pwd)
|
|
WLW="$ROOT/wai/wai-live-web"
|
|
LOCKED=${CARGO_LOCKED---locked}
|
|
TARGET=${CARGO_TARGET_DIR:-$JC/target}
|
|
export CARGO_TARGET_DIR="$TARGET"
|
|
OUT=${MOQ_WEB_OUT:-${TMPDIR:-/tmp}/moq-web-e2e}
|
|
mkdir -p "$OUT"
|
|
# Each run starts from no results: a scenario writes keys and logs there, and the room
|
|
# service's keygen refuses a key file a previous run left.
|
|
rm -rf "$OUT/results"
|
|
PKG="$CRATE/web/pkg"
|
|
mkdir -p "$PKG"
|
|
|
|
step() { echo "== $*"; }
|
|
|
|
step "native: joule-moq-relay, joule-moq-room, wai_live_web"
|
|
(cd "$JC" && cargo build $LOCKED --release -p joule-moq-relay --bin joule-moq-relay)
|
|
(cd "$CRATE/../joule-moq-room" && cargo build $LOCKED --release --bin joule-moq-room)
|
|
(cd "$WLW" && cargo build $LOCKED --release --bin wai_live_web)
|
|
|
|
step "wasm: joule-moq-web, wai-live-web"
|
|
command -v wasm-bindgen >/dev/null || { echo "wasm-bindgen CLI 0.2.127 is needed (cargo install --locked wasm-bindgen-cli --version 0.2.127)"; exit 2; }
|
|
wasm-bindgen --version | grep -q ' 0\.2\.127$' || { echo "the wasm-bindgen CLI must be 0.2.127, the version both crates pin"; exit 2; }
|
|
(cd "$JC" && cargo build $LOCKED --release -p joule-moq-web --lib --target wasm32-unknown-unknown)
|
|
wasm-bindgen --target web --out-dir "$PKG" --out-name joule_moq_web "$TARGET/wasm32-unknown-unknown/release/joule_moq_web.wasm"
|
|
(cd "$WLW" && cargo build $LOCKED --release --lib --target wasm32-unknown-unknown)
|
|
wasm-bindgen --target web --out-dir "$PKG" --out-name wai_live_web "$TARGET/wasm32-unknown-unknown/release/wai_live_web.wasm"
|
|
ls -l "$PKG"/*.wasm
|
|
|
|
step "browser automation"
|
|
if [ -z "${PLAYWRIGHT_HOST:-}" ]; then
|
|
PW="$OUT/pw"
|
|
mkdir -p "$PW"
|
|
cp "$HERE/package.json" "$HERE/package-lock.json" "$PW/"
|
|
(cd "$PW" && npm ci --ignore-scripts --no-audit --no-fund)
|
|
export PLAYWRIGHT_HOST="$PW/node_modules"
|
|
fi
|
|
BROWSER_BIN=${BROWSER_BIN:-}
|
|
|
|
step "unit tests of the page's modules"
|
|
node --test "$CRATE/web/moq/capsule.test.mjs" "$CRATE/web/moq/media.test.mjs"
|
|
|
|
step "end-to-end"
|
|
browser=()
|
|
[ -n "$BROWSER_BIN" ] && browser=(--browser "$BROWSER_BIN")
|
|
node "$HERE/room.e2e.mjs" \
|
|
--relay "$TARGET/release/joule-moq-relay" \
|
|
--room "$TARGET/release/joule-moq-room" \
|
|
--wai "$TARGET/release/wai_live_web" \
|
|
--web "$CRATE/web" \
|
|
--corpus "$ROOT/wai/live-conformance/compose/vectors.json" \
|
|
--out "$OUT/results" \
|
|
${browser[@]+"${browser[@]}"} \
|
|
"$@"
|