#!/usr/bin/env bash set -u -o pipefail TEST_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" test_dir="$(mktemp -d)" trap 'rm -rf "$test_dir"' EXIT TAPM_FLEET_STATE_DIR="${test_dir}/state" TAPM_FLEET_IDENTITY_FILE="${TAPM_FLEET_STATE_DIR}/identity.env" TAPM_BROKER_URL='https://tapm.example.com' source "${TEST_ROOT}/inc/fleet.inc" TAPM_FLEET_ENSURE_IDENTITY if ! TAPM_FLEET_VALID_IDENTITY; then printf 'FAIL: generated fleet identity is invalid\n' >&2 exit 1 fi if stat -c '%a' "$TAPM_FLEET_IDENTITY_FILE" >/dev/null 2>&1; then identity_mode="$(stat -c '%a' "$TAPM_FLEET_IDENTITY_FILE")" else identity_mode="$(stat -f '%Lp' "$TAPM_FLEET_IDENTITY_FILE")" fi if [[ "$identity_mode" != 600 ]]; then printf 'FAIL: fleet identity mode is not 600\n' >&2 exit 1 fi TAPM_FLEET_VERSION='2026.7.26-7' TAPM_FLEET_HOSTNAME='pve01' TAPM_FLEET_GIT_COMMIT='0123456789abcdef0123456789abcdef01234567' TAPM_FLEET_PVE_VERSION='pve-manager/9.0.3/abc~1' TAPM_FLEET_OS_VERSION='Debian GNU/Linux 13 (trixie)' TAPM_FLEET_KERNEL_VERSION='6.14.11-2-pve' TAPM_FLEET_ARCHITECTURE='amd64' TAPM_FLEET_CLUSTERED=true registration_json="$( TAPM_FLEET_INCLUDE_CREDENTIAL=1 TAPM_FLEET_JSON installed success )" REGISTRATION_JSON="$registration_json" python3 -c ' import json, os payload = json.loads(os.environ["REGISTRATION_JSON"]) assert payload["installation_id"] assert payload["hostname"] == "pve01" assert len(payload["credential"]) == 64 assert payload["proxmenu_version"] == "2026.7.26-7" assert payload["clustered"] is True ' printf '0\n' >"${test_dir}/curl-count" curl_should_fail=0 curl() { local count data_path='' previous='' argument='' count="$(cat "${test_dir}/curl-count")" count="$((count + 1))" printf '%s\n' "$count" >"${test_dir}/curl-count" for argument in "$@"; do if [[ "$previous" == '--data-binary' ]]; then data_path="${argument#@}" fi previous="$argument" done if [[ -n "$data_path" && "$data_path" != '-' ]]; then cp "$data_path" "${test_dir}/curl-body-${count}.json" fi cat >"${test_dir}/curl-config-${count}" (( curl_should_fail == 0 )) } TAPM_FLEET_REGISTERED=1 TAPM_FLEET_EVENT_SEND run_completed success '' 12 EVENT_BODY="$(cat "${test_dir}/curl-body-1.json")" \ EVENT_CONFIG="$(cat "${test_dir}/curl-config-1")" \ EXPECTED_CREDENTIAL="$TAPM_FLEET_CREDENTIAL" \ python3 -c ' import json, os payload = json.loads(os.environ["EVENT_BODY"]) assert payload["event"] == "run_completed" assert payload["hostname"] == "pve01" assert payload["result"] == "success" assert payload["duration_seconds"] == 12 assert "credential" not in payload config = os.environ["EVENT_CONFIG"] assert "Authorization: Bearer " + os.environ["EXPECTED_CREDENTIAL"] in config assert "https://tapm.example.com/api/v1/hosts/events" in config ' if compgen -G "${TMPDIR:-/tmp}/tapm-fleet-event.*" >/dev/null; then printf 'FAIL: fleet event left a temporary payload file\n' >&2 exit 1 fi printf '0\n' >"${test_dir}/curl-count" TAPM_FLEET_ENROLLED=0 TAPM_FLEET_REGISTERED=0 TAPM_FLEET_LAST_VERSION='' TAPM_FLEET_COLLECT_METADATA() { TAPM_FLEET_HOSTNAME='pve01' TAPM_FLEET_GIT_COMMIT='0123456789abcdef0123456789abcdef01234567' TAPM_FLEET_PVE_VERSION='pve-manager/9.2.4' TAPM_FLEET_OS_VERSION='Debian GNU/Linux 13 (trixie)' TAPM_FLEET_KERNEL_VERSION='6.14.11-5-pve' TAPM_FLEET_ARCHITECTURE='amd64' TAPM_FLEET_CLUSTERED=true } TAPM_FLEET_START '2026.7.28-9' TAPM_FLEET_FINISH 0 if [[ "$(cat "${test_dir}/curl-count")" != 2 ]]; then printf 'FAIL: initial run did not make exactly registration + completion calls\n' >&2 exit 1 fi TAPM_FLEET_LOAD_IDENTITY if [[ "$TAPM_FLEET_ENROLLED" != 1 || "$TAPM_FLEET_LAST_VERSION" != '2026.7.28-9' ]]; then printf 'FAIL: successful fleet enrollment was not persisted\n' >&2 exit 1 fi TAPM_FLEET_REGISTERED=0 TAPM_FLEET_START '2026.7.28-9' TAPM_FLEET_FINISH 0 if [[ "$(cat "${test_dir}/curl-count")" != 3 ]]; then printf 'FAIL: normal run made more than one broker call\n' >&2 exit 1 fi curl_should_fail=1 TAPM_FLEET_REGISTERED=0 TAPM_FLEET_START '2026.7.28-9' TAPM_FLEET_FINISH 0 TAPM_FLEET_LOAD_IDENTITY if [[ "$TAPM_FLEET_ENROLLED" != 0 ]]; then printf 'FAIL: failed fleet event did not schedule next-run re-enrollment\n' >&2 exit 1 fi curl_should_fail=0 TAPM_FLEET_REGISTERED=0 TAPM_FLEET_START '2026.7.28-9' TAPM_FLEET_FINISH 0 TAPM_FLEET_LOAD_IDENTITY if [[ "$TAPM_FLEET_ENROLLED" != 1 ]]; then printf 'FAIL: fleet client did not recover enrollment after a failed event\n' >&2 exit 1 fi printf 'PASS: fleet identity and event client\n'