Implement durable MQ controls and isolated Dispatcher runtime
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user