#!/usr/bin/env bash # I2P Python Router — Integration Test Runner # # Builds the container, starts the pod, runs the test, collects logs. # Usage: ./run_test.sh [duration_seconds] # # Default duration: 10800 (3 hours) set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" IMAGE_NAME="localhost/i2p-python-test:latest" POD_NAME="i2p-python-test" DATA_DIR="/tmp/i2p-integration-data" DURATION="${1:-10800}" LOG_FILE="${DATA_DIR}/integration-test.log" echo "=== I2P Python Router — Integration Test ===" echo "Project root: ${PROJECT_ROOT}" echo "Duration: ${DURATION}s ($(echo "scale=1; ${DURATION}/3600" | bc)h)" echo "Data dir: ${DATA_DIR}" echo "" # 1. Create data directory mkdir -p "${DATA_DIR}" # 2. Build container image echo "Building container image..." podman build \ -t "${IMAGE_NAME}" \ -f "${SCRIPT_DIR}/Containerfile" \ "${PROJECT_ROOT}" echo "Image built: ${IMAGE_NAME}" # 3. Clean up any previous pod podman pod rm -f "${POD_NAME}" 2>/dev/null || true # 4. Start the pod with duration override echo "Starting pod..." podman play kube "${SCRIPT_DIR}/pod.yaml" # Override the test duration via env podman exec "${POD_NAME}-router" \ env I2P_TEST_DURATION="${DURATION}" \ python -m tests.integration.network_test \ 2>&1 | tee "${LOG_FILE}" & TEST_PID=$! echo "Test running (PID ${TEST_PID}), logs at: ${LOG_FILE}" echo "" echo "Monitor with:" echo " tail -f ${LOG_FILE}" echo " podman logs -f ${POD_NAME}-router" echo "" echo "Stop early with:" echo " kill ${TEST_PID}" echo " podman pod stop ${POD_NAME}" # 5. Wait for completion wait ${TEST_PID} EXIT_CODE=$? # 6. Collect results echo "" echo "=== Test Complete ===" echo "Exit code: ${EXIT_CODE}" if [ -f "${DATA_DIR}/test_results.json" ]; then echo "" echo "Results summary:" python3 -c " import json, sys with open('${DATA_DIR}/test_results.json') as f: r = json.load(f) print(f' Max peers: {r[\"max_peers\"]}') print(f' Sites resolved: {r[\"sites_resolved\"]}') print(f' Total polls: {r[\"total_polls\"]}') print(f' Duration: {r[\"duration_seconds\"]}s') " fi # 7. Cleanup echo "" echo "Cleaning up pod..." podman pod stop "${POD_NAME}" 2>/dev/null || true podman pod rm -f "${POD_NAME}" 2>/dev/null || true echo "Done. Data preserved at: ${DATA_DIR}" exit ${EXIT_CODE}