Files
Ustagammon/tests/test_site.sh
T

55 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Vérifie l'image de production (deploy/) avec le site assemblé (make package) :
# construit l'image en local, la lance, et contrôle ce que reçoit un
# navigateur (pages, types MIME du moteur, compression, version).
set -euo pipefail
cd "$(dirname "$0")/.."
unset MAKEFLAGS MFLAGS MAKELEVEL
make -s package >/dev/null
image="ustagammon/site-test:local"
docker build -q -t "$image" build/deploy >/dev/null
container="$(docker run -d --rm -p 127.0.0.1::80 "$image")"
trap 'docker stop "$container" >/dev/null' EXIT
port="$(docker port "$container" 80/tcp | head -n1 | sed 's/.*://')"
base="http://127.0.0.1:$port"
# Caddy démarre en une fraction de seconde : on attend qu'il réponde.
for _ in $(seq 1 50); do
curl -sf -o /dev/null "$base/" && break
sleep 0.1
done
errors=0
report() {
echo "$1"
errors=$((errors + 1))
}
# check <chemin> <début du type MIME attendu>
check() {
local headers
headers="$(curl -s -D - -o /dev/null "$base/$1")"
grep -qE "^HTTP/1.1 200" <<<"$headers" || report "/$1 : pas de réponse 200"
grep -qiE "^Content-Type: $2" <<<"$headers" || report "/$1 : type MIME attendu $2"
}
check "" "text/html"
check "bench.html" "text/html"
check "engine-worker.mjs" "text/javascript"
check "wasm/engine.mjs" "text/javascript"
check "wasm/engine.wasm" "application/wasm"
check "wasm/engine.data" "application/octet-stream"
check "version.json" "application/json"
curl -s -H "Accept-Encoding: gzip" -D - -o /dev/null "$base/wasm/engine.data" \
| grep -qi "^Content-Encoding: gzip" || report "/wasm/engine.data : pas de compression gzip"
curl -s -D - -o /dev/null "$base/" | grep -qi "^Cache-Control: no-cache" \
|| report "/ : en-tête Cache-Control absent"
[ "$(curl -s "$base/version.json" | sed -n 's/.*"commit": "\([0-9a-f]*\)".*/\1/p')" = "$(git rev-parse HEAD)" ] \
|| report "version.json ne donne pas le commit courant"
[ "$errors" -eq 0 ]