#!/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" 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