test(supply-api): add repository integration suite and runner
Add repository integration probes, repository policy tests, the compose-based integration runner, and the matching usage documentation. Align the runner environment with both repository and middleware integration test expectations, and verify with fresh repository tests, integration-tag test runs, bash -n, and docker-compose config before commit.
This commit is contained in:
82
supply-api/scripts/run_integration_tests.sh
Executable file
82
supply-api/scripts/run_integration_tests.sh
Executable file
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
# Supply API Integration Test Runner
|
||||
# Usage: ./scripts/run_integration_tests.sh [package]
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
DEPLOY_DIR="$PROJECT_DIR/deploy"
|
||||
|
||||
# Default package to test
|
||||
PACKAGE="${1:-./internal/middleware/...}"
|
||||
|
||||
echo "=== Supply API Integration Tests ==="
|
||||
echo ""
|
||||
|
||||
# Resolve compose command
|
||||
if command -v docker-compose &> /dev/null; then
|
||||
COMPOSE_CMD=(docker-compose)
|
||||
elif command -v docker &> /dev/null && docker compose version &> /dev/null; then
|
||||
COMPOSE_CMD=(docker compose)
|
||||
else
|
||||
echo "ERROR: neither docker-compose nor docker compose is available"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Start infrastructure
|
||||
echo "Starting test infrastructure..."
|
||||
"${COMPOSE_CMD[@]}" -f "$DEPLOY_DIR/docker-compose.yml" up -d
|
||||
|
||||
# Wait for services to be healthy
|
||||
echo "Waiting for PostgreSQL to be ready..."
|
||||
for i in {1..30}; do
|
||||
if "${COMPOSE_CMD[@]}" -f "$DEPLOY_DIR/docker-compose.yml" exec -T postgres pg_isready -U supply_test &> /dev/null; then
|
||||
echo "PostgreSQL is ready"
|
||||
break
|
||||
fi
|
||||
if [ $i -eq 30 ]; then
|
||||
echo "ERROR: PostgreSQL failed to start"
|
||||
"${COMPOSE_CMD[@]}" -f "$DEPLOY_DIR/docker-compose.yml" logs postgres
|
||||
exit 1
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "Waiting for Redis to be ready..."
|
||||
for i in {1..30}; do
|
||||
if "${COMPOSE_CMD[@]}" -f "$DEPLOY_DIR/docker-compose.yml" exec -T redis redis-cli ping &> /dev/null; then
|
||||
echo "Redis is ready"
|
||||
break
|
||||
fi
|
||||
if [ $i -eq 30 ]; then
|
||||
echo "ERROR: Redis failed to start"
|
||||
"${COMPOSE_CMD[@]}" -f "$DEPLOY_DIR/docker-compose.yml" logs redis
|
||||
exit 1
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Running integration tests for: $PACKAGE"
|
||||
echo ""
|
||||
|
||||
# Run tests with integration tag
|
||||
cd "$PROJECT_DIR"
|
||||
export SUPPLY_API_DB_HOST="localhost"
|
||||
export SUPPLY_API_DB_PORT="5432"
|
||||
export SUPPLY_API_DB_USER="supply_test"
|
||||
export SUPPLY_API_DB_PASSWORD="supply_test_pass"
|
||||
export SUPPLY_API_DB_NAME="supply_test"
|
||||
export SUPPLY_TEST_POSTGRES="postgres://supply_test:supply_test_pass@localhost:5432/supply_test?sslmode=disable"
|
||||
export SUPPLY_TEST_REDIS="localhost:6379"
|
||||
|
||||
go test -tags=integration -v "$PACKAGE"
|
||||
|
||||
TEST_RESULT=$?
|
||||
|
||||
echo ""
|
||||
echo "Stopping test infrastructure..."
|
||||
"${COMPOSE_CMD[@]}" -f "$DEPLOY_DIR/docker-compose.yml" down -v
|
||||
|
||||
exit $TEST_RESULT
|
||||
Reference in New Issue
Block a user