Files
go-sip/scripts/check-current-mq-mock.sh
T

56 lines
2.4 KiB
Bash

#!/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