Files
go-sip/scripts/mq-integration-local.sh
T

54 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
cd -- "$ROOT"
IMAGE=${RABBITMQ_IMAGE:-rabbitmq:4.1-management-alpine}
NAME="sip-go-agent-rabbit-poc-${$}"
PORT=""
command -v docker >/dev/null 2>&1 || { echo "docker is required for local RabbitMQ tests" >&2; exit 1; }
if ! docker image inspect "$IMAGE" >/dev/null 2>&1; then
echo "RabbitMQ image $IMAGE is not cached locally; refusing an implicit image pull" >&2
exit 1
fi
RABBIT_USER=${RABBITMQ_TEST_USER:-agent_call_integration}
RABBIT_PASSWORD=${RABBITMQ_TEST_PASSWORD:-$(openssl rand -hex 16)}
DISPATCHER_USER="sip_go_agent_no_config_${$}"
DISPATCHER_PASSWORD=$(openssl rand -hex 16)
RABBIT_UID=$(docker run --rm "$IMAGE" id -u rabbitmq)
RABBIT_GID=$(docker run --rm "$IMAGE" id -g rabbitmq)
cleanup() {
docker rm -f "$NAME" >/dev/null 2>&1 || true
}
trap cleanup EXIT
docker run -d --name "$NAME" --user "${RABBIT_UID}:${RABBIT_GID}" -e RABBITMQ_DEFAULT_USER="$RABBIT_USER" -e RABBITMQ_DEFAULT_PASS="$RABBIT_PASSWORD" -p 0:5672 "$IMAGE" >/dev/null
ready=false
for _ in $(seq 1 90); do
if docker exec "$NAME" rabbitmq-diagnostics -q check_running >/dev/null 2>&1; then
ready=true
break
fi
sleep 1
done
if [[ "$ready" != true ]]; then
docker logs "$NAME" >&2 || true
echo "RabbitMQ did not become ready" >&2
exit 1
fi
PORT=$(docker port "$NAME" 5672/tcp | head -1 | sed -E 's/.*:([0-9]+)$/\1/')
if [[ -z "$PORT" ]]; then
echo "could not determine RabbitMQ host port" >&2
exit 1
fi
IMAGE_ID=$(docker image inspect --format '{{.Id}}' "$IMAGE")
docker exec "$NAME" rabbitmqctl add_user "$DISPATCHER_USER" "$DISPATCHER_PASSWORD" >/dev/null
docker exec "$NAME" rabbitmqctl set_permissions -p / "$DISPATCHER_USER" '^$' '.*' '.*' >/dev/null
ADMIN_URL="amqp://${RABBIT_USER}:${RABBIT_PASSWORD}@127.0.0.1:${PORT}/"
DISPATCHER_URL="amqp://${DISPATCHER_USER}:${DISPATCHER_PASSWORD}@127.0.0.1:${PORT}/"
printf 'local RabbitMQ image=%s id=%s uid=%s gid=%s port=%s; restricted Dispatcher configure permission=none\n' "$IMAGE" "$IMAGE_ID" "$RABBIT_UID" "$RABBIT_GID" "$PORT"
RABBITMQ_URL="$ADMIN_URL" RABBITMQ_PROVISIONER_URL="$ADMIN_URL" go test -race -cover -tags=integration ./internal/mq ./internal/dispatcher
RABBITMQ_URL="$DISPATCHER_URL" RABBITMQ_PROVISIONER_URL="$ADMIN_URL" RABBITMQ_EXPECT_NO_CONFIG=1 go test -race -tags=integration ./internal/mq -run '^TestV3BrokerConsumesSaaSOwnedQueueAndPublishesConfirmedResult$' -count=1
RABBITMQ_URL="$DISPATCHER_URL" RABBITMQ_PROVISIONER_URL="$ADMIN_URL" go test -race -tags=integration ./internal/dispatcher -run '^TestLocalDispatcherMockSaaSEndToEndWithOutboxRecovery$' -count=1