56 lines
2.4 KiB
Bash
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
|