second first commit
This commit is contained in:
Executable
+96
@@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# 1. Start Floci
|
||||
echo "=== Starting Floci with docker-compose ==="
|
||||
docker compose up -d --build
|
||||
|
||||
# Wait for healthy
|
||||
echo "Waiting for Floci to be healthy..."
|
||||
# Portable wait without 'timeout' command
|
||||
MAX_RETRIES=60
|
||||
COUNT=0
|
||||
until curl -sf http://localhost:4566/_floci/health >/dev/null 2>&1; do
|
||||
if [ $COUNT -ge $MAX_RETRIES ]; then
|
||||
echo "Floci failed to become healthy in time"
|
||||
exit 1
|
||||
fi
|
||||
sleep 1
|
||||
COUNT=$((COUNT + 1))
|
||||
echo -n "."
|
||||
done
|
||||
echo " Floci is up!"
|
||||
|
||||
# 2. Network setup (Floci uses floci_default from compose)
|
||||
NETWORK="floci_default"
|
||||
DOCKER_GID=$(stat -c '%g' /var/run/docker.sock 2>/dev/null || stat -f '%g' /var/run/docker.sock)
|
||||
|
||||
# Floci's embedded DNS server resolves *.floci → Floci's IP.
|
||||
# Passing --dns <floci-ip> to test containers lets the S3 virtual-host client
|
||||
# send to <bucket>.floci:4566 which Floci DNS resolves correctly. Without this,
|
||||
# Docker's built-in DNS only resolves the exact service name "floci", not
|
||||
# wildcard subdomains like my-bucket.floci.
|
||||
FLOCI_CONTAINER=$(docker compose ps -q floci 2>/dev/null | head -1)
|
||||
FLOCI_IP=$(docker inspect -f "{{.NetworkSettings.Networks.${NETWORK}.IPAddress}}" "$FLOCI_CONTAINER" 2>/dev/null || true)
|
||||
|
||||
# 3. Test suites
|
||||
SUITES=(
|
||||
"sdk-test-python"
|
||||
"sdk-test-node"
|
||||
"sdk-test-java"
|
||||
"sdk-test-go"
|
||||
"sdk-test-awscli"
|
||||
"compat-cdk"
|
||||
"compat-terraform"
|
||||
"compat-opentofu"
|
||||
)
|
||||
|
||||
# results dir
|
||||
mkdir -p test-results
|
||||
FAILED=0
|
||||
|
||||
for suite in "${SUITES[@]}"; do
|
||||
echo "=== Running $suite in Docker ==="
|
||||
|
||||
IMAGE_NAME="compat-$suite"
|
||||
|
||||
# Build
|
||||
if ! docker build -q -t "$IMAGE_NAME" "compatibility-tests/$suite"; then
|
||||
echo "Test suite $suite failed to build"
|
||||
FAILED=1
|
||||
continue
|
||||
fi
|
||||
|
||||
# Build DNS args: if we resolved Floci's IP, inject it as the DNS server so
|
||||
# wildcard subdomains like <bucket>.floci resolve inside test containers.
|
||||
DNS_ARGS=()
|
||||
if [ -n "$FLOCI_IP" ]; then
|
||||
DNS_ARGS=(--dns "$FLOCI_IP")
|
||||
fi
|
||||
|
||||
# Per-suite extra args, mirroring .github/workflows/compatibility.yml.
|
||||
# sdk-test-java's Lambda hot-reload test needs a host directory that the Docker
|
||||
# daemon can bind-mount into the hot-reload Lambda container.
|
||||
EXTRA_ARGS=()
|
||||
if [ "$suite" = "sdk-test-java" ]; then
|
||||
mkdir -p /tmp/floci-hot-reload
|
||||
EXTRA_ARGS=(-v /tmp/floci-hot-reload:/tmp/floci-hot-reload -e HOT_RELOAD_BASE_DIR=/tmp/floci-hot-reload)
|
||||
fi
|
||||
|
||||
# Run
|
||||
if ! docker run --rm --network "$NETWORK" \
|
||||
"${DNS_ARGS[@]}" \
|
||||
-e FLOCI_ENDPOINT=http://floci:4566 \
|
||||
-e FLOCI_S3_VHOST_ENDPOINT=http://floci:4566 \
|
||||
-v "$(pwd)/test-results:/results" \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--group-add "$DOCKER_GID" \
|
||||
"${EXTRA_ARGS[@]}" \
|
||||
"$IMAGE_NAME"; then
|
||||
echo "Test suite $suite failed"
|
||||
FAILED=1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "=== All Docker tests completed ==="
|
||||
exit "$FAILED"
|
||||
Reference in New Issue
Block a user