#!/usr/bin/env bash # Run the test suite against the deployed container on maple. # # Tests aren't shipped in the prod image (Dockerfile only COPYs app/), # so this tars them, copies them in, and runs unittest discover. Cleans # up after itself so the running container doesn't accrue test files. # # Usage: # scripts/run-tests.sh # run full suite # scripts/run-tests.sh test_lifecycle # run a specific module # # Requires: ssh access to maple (configured in ~/.ssh/config). set -euo pipefail REMOTE_HOST="${REMOTE_HOST:-maple}" CONTAINER="${CONTAINER:-truenas-burnin}" REMOTE_TMP="/tmp/tnb-tests-$$.tgz" CONTAINER_TMP="/tmp/tnb-tests.tgz" PATTERN="${1:-}" # Resolve repo root so this works whether invoked from the root or scripts/ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" echo "→ Packing tests/ from $REPO_ROOT" cd "$REPO_ROOT" tar cz tests | ssh "$REMOTE_HOST" "cat > $REMOTE_TMP" echo "→ Copying into container $CONTAINER" ssh "$REMOTE_HOST" "docker cp $REMOTE_TMP $CONTAINER:$CONTAINER_TMP && rm -f $REMOTE_TMP" if [ -n "$PATTERN" ]; then echo "→ Running tests matching: $PATTERN" RUN_CMD="cd /opt/app && tar xzf $CONTAINER_TMP && python -m unittest tests.$PATTERN -v" else echo "→ Running full suite" RUN_CMD="cd /opt/app && tar xzf $CONTAINER_TMP && python -m unittest discover -s tests" fi # Always try to clean tests/ out of the container after the run, even on failure. CLEANUP="rm -rf /opt/app/tests $CONTAINER_TMP" ssh "$REMOTE_HOST" "docker exec $CONTAINER sh -c '$RUN_CMD; rc=\$?; $CLEANUP; exit \$rc'"