#!/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}" 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 /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 "PASS: response matches expected marker" exit 0 fi echo "FAIL: response does not match expected marker" >&2 printf 'expected: %s\n' "$EXPECTED" >&2 printf 'actual : %s\n' "$TRIMMED" >&2 exit 1