149 lines
4.4 KiB
Bash
149 lines
4.4 KiB
Bash
#!/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'
|