Files
TA-ProxMenu/tests/test-post-install.sh
2026-07-26 01:20:41 -05:00

174 lines
5.6 KiB
Bash

#!/usr/bin/env bash
set -u -o pipefail
TEST_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
source "${TEST_ROOT}/tests/testlib.sh"
source "${TEST_ROOT}/inc/post-install.inc"
assert_equal 9 \
"$(printf '%s\n' 'pve-manager/9.0.3/0255bb4e9600f70c (running kernel: 6.14.8-2-pve)' |
sed -n 's/.*pve-manager\/\([0-9][0-9]*\).*/\1/p')" \
"Proxmox major version extraction"
POST_TEST_ROOT="$(mktemp -d /tmp/tapm-post-install.XXXXXX)"
TAPM_HOST_ROOT="$POST_TEST_ROOT"
cleanup_post_install_tests() {
if [[ "$POST_TEST_ROOT" == /tmp/tapm-post-install.* &&
-d "$POST_TEST_ROOT" ]]; then
rm -rf -- "$POST_TEST_ROOT"
fi
}
trap cleanup_post_install_tests EXIT
mkdir -p \
"${POST_TEST_ROOT}/etc/apt/apt.conf.d" \
"${POST_TEST_ROOT}/etc/systemd" \
"${POST_TEST_ROOT}/etc/logrotate.d" \
"${POST_TEST_ROOT}/etc/sysctl.d" \
"${POST_TEST_ROOT}/etc/network" \
"${POST_TEST_ROOT}/etc" \
"${POST_TEST_ROOT}/bin"
printf 'Acquire::Languages "none";\n' \
>"${POST_TEST_ROOT}/etc/apt/apt.conf.d/99-disable-translations"
assert_success "ProxMenux APT language setting recognized" \
TAPM_POST_EXACT_APT_LANGUAGES
printf 'Acquire::Languages "en";\n' \
>"${POST_TEST_ROOT}/etc/apt/apt.conf.d/99-disable-translations"
assert_failure "custom APT language setting preserved" \
TAPM_POST_EXACT_APT_LANGUAGES
cat >"${POST_TEST_ROOT}/etc/systemd/journald.conf" <<'EOF'
[Journal]
Storage=persistent
Seal=no
SystemMaxUse=64M
RuntimeMaxUse=60M
MaxLevelStore=info
EOF
assert_success "ProxMenux journald replacement recognized" \
TAPM_POST_PROXMENUX_JOURNALD
cat >"${POST_TEST_ROOT}/etc/logrotate.conf" <<'EOF'
# ProxMenux optimized configuration (Log2RAM-friendly)
daily
rotate 7
size 10M
copytruncate
include /etc/logrotate.d
EOF
assert_success "ProxMenux logrotate replacement recognized" \
TAPM_POST_PROXMENUX_LOGROTATE
cat >"${POST_TEST_ROOT}/bin/gzip" <<'EOF'
#!/bin/sh
GZIP="-1"
exec /usr/bin/pigz "$@"
EOF
cat >"${POST_TEST_ROOT}/bin/gzip.original" <<'EOF'
#!/bin/sh
if [ "${1:-}" = "--version" ]; then
printf 'gzip 1.13\n'
else
cat
fi
EOF
cp "${POST_TEST_ROOT}/bin/gzip" "${POST_TEST_ROOT}/bin/pigzwrapper"
chmod 0755 \
"${POST_TEST_ROOT}/bin/gzip" \
"${POST_TEST_ROOT}/bin/gzip.original" \
"${POST_TEST_ROOT}/bin/pigzwrapper"
assert_success "ProxMenux gzip wrapper recognized" \
TAPM_POST_PROXMENUX_GZIP_WRAPPER
assert_success "ProxMenux gzip wrapper repaired from valid original" \
TAPM_POST_REPAIR_GZIP
assert_failure "repaired gzip is no longer recognized as wrapper" \
TAPM_POST_PROXMENUX_GZIP_WRAPPER
assert_failure "obsolete gzip original removed after verification" \
test -e "${POST_TEST_ROOT}/bin/gzip.original"
assert_success "kernel panic profile written" TAPM_POST_CONFIGURE_PANIC
assert_success "inotify profile written" TAPM_POST_CONFIGURE_LIMITS
assert_success "memory profile written" TAPM_POST_CONFIGURE_MEMORY
assert_success "network profile written" TAPM_POST_CONFIGURE_NETWORK
assert_success "BBR profile written" TAPM_POST_CONFIGURE_BBR
assert_equal 30 \
"$(awk '/kernel.panic =/ {print $3}' \
"${POST_TEST_ROOT}/etc/sysctl.d/99-ta-proxmenu-kernel-panic.conf")" \
"kernel panic delay"
assert_equal 524288 \
"$(awk '/max_user_watches/ {print $3}' \
"${POST_TEST_ROOT}/etc/sysctl.d/99-ta-proxmenu-limits.conf")" \
"inotify watch limit"
assert_equal 10 \
"$(awk '/vm.swappiness/ {print $3}' \
"${POST_TEST_ROOT}/etc/sysctl.d/99-ta-proxmenu-memory.conf")" \
"host swappiness"
cat >"${POST_TEST_ROOT}/etc/vzdump.conf" <<'EOF'
# existing setting
bwlimit: 50000
pigz: 4
pigz: 8
EOF
assert_success "vzdump key replacement" \
TAPM_POST_SET_COLON_KEY /etc/vzdump.conf pigz 1
assert_equal 1 \
"$(awk -F: '/^pigz:/ {gsub(/[[:space:]]/, "", $2); print $2}' \
"${POST_TEST_ROOT}/etc/vzdump.conf")" \
"vzdump pigz setting is unique"
assert_success "vzdump key removal" \
TAPM_POST_REMOVE_COLON_KEY /etc/vzdump.conf bwlimit
assert_failure "vzdump bandwidth setting removed" \
grep -q '^bwlimit:' "${POST_TEST_ROOT}/etc/vzdump.conf"
printf 'deb should-be-backed-up\n' \
>"${POST_TEST_ROOT}/etc/apt/sources.list"
TAPM_POST_BACKUP_BASE='/var/backups/ta-proxmenu/post-install'
test_post_backup() {
TAPM_POST_BACKUP >/dev/null
}
assert_success "host configuration backup created" test_post_backup
printf 'changed\n' >"${POST_TEST_ROOT}/etc/apt/sources.list"
assert_success "host configuration backup restored" \
TAPM_POST_RESTORE_BACKUP "$TAPM_POST_LAST_BACKUP"
assert_equal 'deb should-be-backed-up' \
"$(cat "${POST_TEST_ROOT}/etc/apt/sources.list")" \
"restored APT sources"
assert_success "APT source layout enforced in fixture root" \
TAPM_POST_ENSURE_APT_LAYOUT
assert_equal 0 \
"$(wc -c <"${POST_TEST_ROOT}/etc/apt/sources.list" | tr -d ' ')" \
"main APT sources list is empty"
mkdir -p \
"${POST_TEST_ROOT}/etc/security/limits.d" \
"${POST_TEST_ROOT}/usr/local/share/proxmenux" \
"${POST_TEST_ROOT}/usr/local/bin"
cat >"${POST_TEST_ROOT}/etc/sysctl.d/99-network.conf" <<'EOF'
# Custom administrator network profile
net.ipv4.ip_forward = 1
EOF
cat >"${POST_TEST_ROOT}/etc/security/limits.d/99-limits.conf" <<'EOF'
# ProxMenux configuration
* soft nofile 1048576
EOF
cat >"${POST_TEST_ROOT}/usr/local/bin/menu" <<'EOF'
#!/bin/sh
exec /usr/local/share/proxmenux/menu.sh
EOF
assert_success "recognized ProxMenux settings cleaned" \
TAPM_POST_CLEAN_PROXMENUX_SETTINGS
assert_success "custom similarly named network profile retained" \
test -f "${POST_TEST_ROOT}/etc/sysctl.d/99-network.conf"
assert_failure "recognized ProxMenux limits profile removed" \
test -e "${POST_TEST_ROOT}/etc/security/limits.d/99-limits.conf"
assert_success "ProxMenux application removed" TAPM_POST_REMOVE_PROXMENUX_APP
assert_failure "ProxMenux menu launcher removed" \
test -e "${POST_TEST_ROOT}/usr/local/bin/menu"
finish_tests