server-monitor-manager/tests/bootstrap/test-uninstall-mode.sh
2026-08-18 02:53:37 +07:00

55 lines
2.1 KiB
Bash

#!/usr/bin/env bash
set -Eeuo pipefail
IFS=$'\n\t'
root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)"
bootstrap="$root/deploy/ochenstarik-server-monitor-manager.sh"
setup="$root/deploy/smm-setup.sh"
refusal_output="$(mktemp -t smm-uninstall-refused.XXXXXXXX)"
trap 'rm -f -- "$refusal_output"' EXIT
bash -n "$bootstrap" "$setup"
if bash "$bootstrap" uninstall-system >/dev/null 2>"$refusal_output"; then
printf '%s\n' 'uninstall-system accepted a request without confirmation' >&2
exit 1
fi
grep -Fq -- '--confirm-uninstall' "$refusal_output"
definition="$(awk '
/^uninstall_system\(\) \{/ { active=1 }
active { print }
active && /^}$/ { exit }
' "$bootstrap")"
stop_line="$(grep -Fn ' stop_owned_services' <<<"$definition" | cut -d: -f1)"
term_line="$(grep -Fn ' terminate_owned_processes' <<<"$definition" | cut -d: -f1)"
network_line="$(grep -Fn ' remove_owned_network' <<<"$definition" | cut -d: -f1)"
files_line="$(grep -Fn ' remove_owned_files' <<<"$definition" | cut -d: -f1)"
accounts_line="$(grep -Fn ' remove_owned_accounts' <<<"$definition" | cut -d: -f1)"
(( stop_line < term_line && term_line < network_line && network_line < files_line && files_line < accounts_line ))
grep -Fq 'pkill -TERM -u "$user"' "$bootstrap"
grep -Fq 'pkill -KILL -u "$user"' "$bootstrap"
grep -Fq 'nft delete table inet ochenstarik_smm' "$bootstrap"
grep -Fq 'ip link delete smm0' "$bootstrap"
grep -Fq 'port-7443:' "$bootstrap"
grep -Fq 'port-51820:' "$bootstrap"
grep -Fq 'mesh-routes:' "$bootstrap"
grep -Fq 'owned-units:' "$bootstrap"
grep -Fq 'owned-users:' "$bootstrap"
grep -Fq 'control-ca.pfx' "$bootstrap"
grep -Fq 'bootstrap-backups' "$bootstrap"
grep -Fq 'Type UNINSTALL' "$setup"
grep -Fq 'Type DESTROY-DATA' "$setup"
grep -Fq '3) Uninstall' "$setup"
if grep -Eiq '3x-ui|x-ui' "$bootstrap" "$setup"; then
printf '%s\n' 'uninstall implementation references protected 3x-ui objects' >&2
exit 1
fi
if grep -Eq "rm -rf --? [\"']?/(etc|var|usr)(/|[\"']|$)" "$bootstrap"; then
printf '%s\n' 'uninstall implementation contains a broad recursive deletion' >&2
exit 1
fi
printf '%s\n' 'UNINSTALL_MODE=PASS'