Owner feedback: grep match-highlighting made the word 'policy' red while status words were plain - counter-indicative. Suites + verify now emit ANSI colors (green success, red failure) when stdout is a terminal; piped/machine-parsed output stays plain, honoring NO_COLOR. Word 'ok' promoted to 'OK' for scannability. Verified byte-level via forced-pty run; piped output unchanged; suites 41/24/14 + verify green.
69 lines
2.1 KiB
Bash
Executable File
69 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Complete verification test:
|
|
# 1. Build or confirm the image is built.
|
|
# 2. Run the agent request.
|
|
# 3. Remove surrounding whitespace from the response.
|
|
# 4. Compare with the expected marker (default MOSAIC_HELLO_OK).
|
|
# 5. Exit 0 only on exact match; nonzero otherwise.
|
|
#
|
|
# EXPECTED_MARKER may be overridden to prove the failure path
|
|
# (acceptance criterion 9), e.g.:
|
|
# EXPECTED_MARKER=MOSAIC_NOT_OK scripts/verify.sh
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
# shellcheck source=common.sh
|
|
source scripts/common.sh
|
|
|
|
EXPECTED="${EXPECTED_MARKER:-MOSAIC_HELLO_OK}"
|
|
|
|
# Status colors: terminal-only, NO_COLOR-respecting; plain when piped.
|
|
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
|
|
|
|
load_config
|
|
load_release
|
|
IMAGE="$MOSAIC_IMAGE_TAG"
|
|
|
|
# Ensure the configured data root exists (host-owned) before the mount,
|
|
# otherwise Docker would auto-create a root-owned directory.
|
|
bootstrap_runtime_dir
|
|
|
|
# 1. Build the image only if it is not already present.
|
|
if ! docker image inspect "$IMAGE" >/dev/null 2>&1; then
|
|
echo "verify: image $IMAGE not found, building..." >&2
|
|
bootstrap_runtime_dir
|
|
docker compose build
|
|
fi
|
|
|
|
# 2. Run the agent request (stdout only = model response).
|
|
# stdin detached: see hello.sh — print mode would block on a terminal.
|
|
set +e
|
|
RESPONSE="$(docker compose run --rm -T mosaic-agent </dev/null 2>/tmp/mosaic-poc-stderr.$$)"
|
|
RC=$?
|
|
set -e
|
|
STDERR_FILE="/tmp/mosaic-poc-stderr.$$"
|
|
if [ $RC -ne 0 ]; then
|
|
echo "verify: agent run failed (exit $RC):" >&2
|
|
cat "$STDERR_FILE" >&2
|
|
rm -f "$STDERR_FILE"
|
|
exit 1
|
|
fi
|
|
rm -f "$STDERR_FILE"
|
|
|
|
# 3. Remove surrounding whitespace.
|
|
TRIMMED="$(printf '%s' "$RESPONSE" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
|
|
|
|
# 4-6. Exact comparison gate.
|
|
if [ "$TRIMMED" = "$EXPECTED" ]; then
|
|
echo "${C_OK}PASS${C_RESET}: response matches expected marker"
|
|
exit 0
|
|
fi
|
|
|
|
echo "${C_FAIL}FAIL${C_RESET}: response does not match expected marker" >&2
|
|
printf 'expected: %s\n' "$EXPECTED" >&2
|
|
printf 'actual : %s\n' "$TRIMMED" >&2
|
|
exit 1
|