mirror of
https://github.com/mulgadc/spinifex.git
synced 2026-10-15 09:01:31 +00:00
104 lines
2.8 KiB
Bash
Executable File
104 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Run E2E tests locally using Docker, matching the CI process (e2e.yml).
|
|
# Requires: Docker, /dev/kvm
|
|
#
|
|
# Usage:
|
|
# ./scripts/run-e2e-local.sh # Run both suites
|
|
# ./scripts/run-e2e-local.sh single # Single-node only
|
|
# ./scripts/run-e2e-local.sh multi # Multi-node only
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
PARENT_DIR="$(cd "$PROJECT_ROOT/.." && pwd)"
|
|
|
|
IMAGE_NAME="hive-e2e:latest"
|
|
|
|
# Determine which suites to run
|
|
SUITE="${1:-both}"
|
|
case "$SUITE" in
|
|
single|multi|both) ;;
|
|
*)
|
|
echo "Usage: $0 [single|multi|both]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Verify /dev/kvm exists
|
|
if [ ! -e /dev/kvm ]; then
|
|
echo "ERROR: /dev/kvm not found. KVM is required for E2E tests."
|
|
exit 1
|
|
fi
|
|
|
|
# Verify sibling repos exist, clone if missing
|
|
for dep in viperblock predastore; do
|
|
if [ ! -d "$PARENT_DIR/$dep" ]; then
|
|
echo "Sibling repo '$dep' not found at $PARENT_DIR/$dep"
|
|
echo "Running clone-deps.sh..."
|
|
"$PROJECT_ROOT/scripts/clone-deps.sh"
|
|
break
|
|
fi
|
|
done
|
|
|
|
# Build Docker image (same context as CI — parent directory)
|
|
echo "Building E2E Docker image..."
|
|
docker build \
|
|
-t "$IMAGE_NAME" \
|
|
-f "$PROJECT_ROOT/tests/e2e/Dockerfile.e2e" \
|
|
"$PARENT_DIR"
|
|
|
|
SINGLE_PASS=""
|
|
MULTI_PASS=""
|
|
|
|
# Run single-node E2E
|
|
if [ "$SUITE" = "single" ] || [ "$SUITE" = "both" ]; then
|
|
echo ""
|
|
echo "========================================"
|
|
echo "Running Single-Node E2E Tests"
|
|
echo "========================================"
|
|
if docker run --privileged --rm \
|
|
-v /dev/kvm:/dev/kvm \
|
|
--name hive-e2e-local \
|
|
"$IMAGE_NAME"; then
|
|
SINGLE_PASS="PASS"
|
|
echo "Single-node E2E: PASS"
|
|
else
|
|
SINGLE_PASS="FAIL"
|
|
echo "Single-node E2E: FAIL"
|
|
fi
|
|
fi
|
|
|
|
# Run multi-node E2E
|
|
if [ "$SUITE" = "multi" ] || [ "$SUITE" = "both" ]; then
|
|
echo ""
|
|
echo "========================================"
|
|
echo "Running Multi-Node E2E Tests"
|
|
echo "========================================"
|
|
if docker run --privileged --rm \
|
|
-v /dev/kvm:/dev/kvm \
|
|
--cap-add=NET_ADMIN \
|
|
--name hive-multinode-e2e-local \
|
|
"$IMAGE_NAME" \
|
|
./tests/e2e/run-multinode-e2e.sh; then
|
|
MULTI_PASS="PASS"
|
|
echo "Multi-node E2E: PASS"
|
|
else
|
|
MULTI_PASS="FAIL"
|
|
echo "Multi-node E2E: FAIL"
|
|
fi
|
|
fi
|
|
|
|
# Summary
|
|
echo ""
|
|
echo "========================================"
|
|
echo "E2E Results"
|
|
echo "========================================"
|
|
[ -n "$SINGLE_PASS" ] && echo " Single-node: $SINGLE_PASS"
|
|
[ -n "$MULTI_PASS" ] && echo " Multi-node: $MULTI_PASS"
|
|
|
|
# Exit with failure if any suite failed
|
|
if [ "$SINGLE_PASS" = "FAIL" ] || [ "$MULTI_PASS" = "FAIL" ]; then
|
|
exit 1
|
|
fi
|