A Python port of the Invisible Internet Project (I2P)
1#!/usr/bin/env bash
2# I2P Python Router — Integration Test Runner
3#
4# Builds the container, starts the pod, runs the test, collects logs.
5# Usage: ./run_test.sh [duration_seconds]
6#
7# Default duration: 10800 (3 hours)
8
9set -euo pipefail
10
11SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
12PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
13IMAGE_NAME="localhost/i2p-python-test:latest"
14POD_NAME="i2p-python-test"
15DATA_DIR="/tmp/i2p-integration-data"
16DURATION="${1:-10800}"
17LOG_FILE="${DATA_DIR}/integration-test.log"
18
19echo "=== I2P Python Router — Integration Test ==="
20echo "Project root: ${PROJECT_ROOT}"
21echo "Duration: ${DURATION}s ($(echo "scale=1; ${DURATION}/3600" | bc)h)"
22echo "Data dir: ${DATA_DIR}"
23echo ""
24
25# 1. Create data directory
26mkdir -p "${DATA_DIR}"
27
28# 2. Build container image
29echo "Building container image..."
30podman build \
31 -t "${IMAGE_NAME}" \
32 -f "${SCRIPT_DIR}/Containerfile" \
33 "${PROJECT_ROOT}"
34
35echo "Image built: ${IMAGE_NAME}"
36
37# 3. Clean up any previous pod
38podman pod rm -f "${POD_NAME}" 2>/dev/null || true
39
40# 4. Start the pod with duration override
41echo "Starting pod..."
42podman play kube "${SCRIPT_DIR}/pod.yaml"
43
44# Override the test duration via env
45podman exec "${POD_NAME}-router" \
46 env I2P_TEST_DURATION="${DURATION}" \
47 python -m tests.integration.network_test \
48 2>&1 | tee "${LOG_FILE}" &
49
50TEST_PID=$!
51
52echo "Test running (PID ${TEST_PID}), logs at: ${LOG_FILE}"
53echo ""
54echo "Monitor with:"
55echo " tail -f ${LOG_FILE}"
56echo " podman logs -f ${POD_NAME}-router"
57echo ""
58echo "Stop early with:"
59echo " kill ${TEST_PID}"
60echo " podman pod stop ${POD_NAME}"
61
62# 5. Wait for completion
63wait ${TEST_PID}
64EXIT_CODE=$?
65
66# 6. Collect results
67echo ""
68echo "=== Test Complete ==="
69echo "Exit code: ${EXIT_CODE}"
70
71if [ -f "${DATA_DIR}/test_results.json" ]; then
72 echo ""
73 echo "Results summary:"
74 python3 -c "
75import json, sys
76with open('${DATA_DIR}/test_results.json') as f:
77 r = json.load(f)
78print(f' Max peers: {r[\"max_peers\"]}')
79print(f' Sites resolved: {r[\"sites_resolved\"]}')
80print(f' Total polls: {r[\"total_polls\"]}')
81print(f' Duration: {r[\"duration_seconds\"]}s')
82"
83fi
84
85# 7. Cleanup
86echo ""
87echo "Cleaning up pod..."
88podman pod stop "${POD_NAME}" 2>/dev/null || true
89podman pod rm -f "${POD_NAME}" 2>/dev/null || true
90
91echo "Done. Data preserved at: ${DATA_DIR}"
92exit ${EXIT_CODE}