#!/usr/bin/env bash

set -Eeuo pipefail

HOST=${MQTT_HOST:-10.2.203.116}
PORT=${MQTT_PORT:-1883}
APP01_CONF=${APP01_CONF:-/etc/zhct/templates/app/nodes/app01/supervisor.conf}
APP02_CONF=${APP02_CONF:-/etc/zhct/templates/app/nodes/app02/supervisor.conf}
DRY_RUN=0
[[ "${1:-}" == '--dry-run' ]] && DRY_RUN=1

grep -Fq 'dev1_consume_work_%(process_num)d' "$APP01_CONF"
grep -Fq 'dev2_consume_work_%(process_num)d' "$APP02_CONF"
[[ $(awk -F= '/^numprocs=/{sum+=$2} END{print sum}' "$APP01_CONF") -eq 9 ]]
[[ $(awk -F= '/^numprocs=/{sum+=$2} END{print sum}' "$APP02_CONF") -eq 9 ]]
ids=()
for node_prefix in dev1 dev2; do
    for process_num in 0 1 2 3; do
        ids+=("${node_prefix}_consume_work_${process_num}")
    done
done
[[ $(printf '%s\n' "${ids[@]}" | sort -u | wc -l) -eq 8 ]] || { echo 'eight MQTT client IDs are not unique' >&2; exit 1; }

if [[ "$DRY_RUN" == 1 ]]; then
    printf 'would pub/sub through MQTT VIP %s:%s and verify reconnect/QoS in Q-263\n' "$HOST" "$PORT"
    exit 0
fi

command -v mosquitto_pub >/dev/null
command -v mosquitto_sub >/dev/null
topic="zhct/sanquan/runtime-check/$(hostname -s)/$$"
message="check-$(date +%s)"
received=$(timeout 10 mosquitto_sub -h "$HOST" -p "$PORT" -t "$topic" -C 1 -q 1 & sub_pid=$!; sleep 1; mosquitto_pub -h "$HOST" -p "$PORT" -t "$topic" -m "$message" -q 1; wait "$sub_pid")
[[ "$received" == "$message" ]]
echo 'PASS: MQTT VIP publish/subscribe; shared-subscription business idempotency remains Q-263'
