#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")/.." image=rabbitmq:4.1-management-alpine if ! command -v docker >/dev/null || ! docker info >/dev/null 2>&1; then echo 'isolated RabbitMQ Mock blocked: Docker is unavailable' >&2 exit 1 fi if ! docker image inspect "$image" >/dev/null 2>&1; then echo "isolated RabbitMQ Mock blocked: local image $image is unavailable (no automatic pull)" >&2 exit 1 fi uid=$(docker run --rm --entrypoint id "$image" -u rabbitmq) gid=$(docker run --rm --entrypoint id "$image" -g rabbitmq) name="sip-go-mq-mock-$$" cleanup() { docker rm -f "$name" >/dev/null 2>&1 || true; } trap cleanup EXIT # Only a local isolated container, with ephemeral data/cookie and an # automatically assigned localhost-only AMQP port. No real SaaS connection. docker run -d --name "$name" --tmpfs "/var/lib/rabbitmq:rw,uid=$uid,gid=$gid,mode=0700" \ -p 127.0.0.1::5672 "$image" >/dev/null ready=0 for _ in $(seq 1 60); do state=$(docker inspect -f '{{.State.Status}}' "$name") if [ "$state" != running ]; then echo "isolated RabbitMQ Mock stopped: $state" >&2 docker logs --tail 24 "$name" >&2 exit 1 fi if docker exec -u rabbitmq "$name" rabbitmq-diagnostics -q check_running >/dev/null 2>&1; then ready=1 break fi sleep 1 done if [ "$ready" -ne 1 ]; then echo 'isolated RabbitMQ Mock did not become ready' >&2 docker logs --tail 24 "$name" >&2 exit 1 fi port=$(docker port "$name" 5672/tcp | awk -F: 'NR==1{print $NF}') saas_pw=$(openssl rand -hex 12) d_pw=$(openssl rand -hex 12) if ! docker exec -u rabbitmq "$name" rabbitmqctl add_user saas_mock "$saas_pw" >/dev/null 2>&1 || ! docker exec -u rabbitmq "$name" rabbitmqctl add_user dispatcher_mock "$d_pw" >/dev/null 2>&1 || ! docker exec -u rabbitmq "$name" rabbitmqctl set_permissions -p / saas_mock '.*' '.*' '.*' >/dev/null 2>&1 || ! docker exec -u rabbitmq "$name" rabbitmqctl set_permissions -p / dispatcher_mock '^$' '^agent-call\.saas\.v1$' '^agent-call\.d\..*\.(control|task\..*)\.v1$' >/dev/null 2>&1; then echo 'isolated RabbitMQ Mock user/permission setup failed' >&2 exit 1 fi export RABBITMQ_URL="amqp://dispatcher_mock:${d_pw}@127.0.0.1:${port}/" export RABBITMQ_PROVISIONER_URL="amqp://saas_mock:${saas_pw}@127.0.0.1:${port}/" go test -tags=integration ./internal/mq -run '^TestCurrentBrokerSharedResultQueueAndNoConfigure$' -count=1 -v go test -tags=integration ./internal/dispatcher -run '^TestCurrentRuntimeIsolated' -count=1 -v