#!/usr/bin/env bash # Suite for packages/queue (issue #1508). Every test runs in scratch # repositories under the system temp directory; nothing touches this # checkout's .git, lock, witness or queue files. # # scripts/test-queue.sh full run # NO_COLOR=1 scripts/test-queue.sh plain output # # Once HEAD holds docs/plans/queue.json (the genesis commit), the suite also # runs `verify` on the live queue, which takes the queue lock for a moment # and writes nothing. set -uo pipefail cd "$(dirname "$0")/.." SANDBOX="$(mktemp -d)" trap 'rm -rf "$SANDBOX"' EXIT PASS=0 FAIL=0 if [ -t 1 ] && [ -z "${NO_COLOR:-}" ]; then C_OK=$'\033[0;32m'; C_FAIL=$'\033[0;31m'; C_RESET=$'\033[0m' else C_OK=""; C_FAIL=""; C_RESET="" fi check() { if [ "$2" = "0" ]; then PASS=$((PASS+1)); echo "${C_OK}OK${C_RESET} $1"; else FAIL=$((FAIL+1)); echo "${C_FAIL}FAIL${C_RESET} $1"; fi } echo "toolchain: node $(node --version), $(git --version)" echo # --- syntax --- for f in packages/queue/src/*.mjs packages/queue/tests/*.mjs packages/queue/tests/fixtures/*.mjs scripts/queue-commit.sh scripts/git-hooks/pre-commit; do case "$f" in *.sh) bash -n "$f" >/dev/null 2>&1 ;; */pre-commit) sh -n "$f" >/dev/null 2>&1 ;; *) node --check "$f" >/dev/null 2>&1 ;; esac check "syntax: $f" $? done [ -x scripts/queue-commit.sh ] && [ -x scripts/git-hooks/pre-commit ] check "queue-commit.sh and the guard are executable" $? node -e 'const p=require("./packages/queue/package.json"); process.exit(p.dependencies||p.devDependencies?1:0)' >/dev/null 2>&1 check "packages/queue declares no dependencies" $? # --- the package tests --- env -u NODE_TEST_CONTEXT node --test --test-reporter=spec packages/queue/tests/ > "$SANDBOX/tests.log" 2>&1 rc=$? grep -E '^ℹ (tests|pass|fail) ' "$SANDBOX/tests.log" if [ "$rc" != 0 ]; then grep -E '^✖|Error' "$SANDBOX/tests.log" | head -40; fi check "node --test packages/queue/tests/" "$rc" # --- the live queue, once genesis is committed --- if git cat-file -e HEAD:docs/plans/queue.json 2>/dev/null; then node packages/queue/src/cli.mjs verify check "queue verify (live queue)" $? else echo "skip queue verify: HEAD has no docs/plans/queue.json (before the genesis commit)" fi echo echo "queue suite: $PASS passed, $FAIL failed" [ "$FAIL" = 0 ]