ProxmoxVED/misc/test-tools-func.sh
CanbiZ f3009620f1
Some checks failed
Bump build.func Revision / bump-revision (push) Has been cancelled
push testcase
2025-10-16 22:38:21 +02:00

303 lines
12 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# ==============================================================================
# TEST SUITE FOR tools.func
# ==============================================================================
# This script tests all setup_* functions from tools.func
# Can be run standalone in any Debian-based system
#
# Usage:
# bash <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/test-tools-func.sh)
# ==============================================================================
set -euo pipefail
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Counters
TESTS_PASSED=0
TESTS_FAILED=0
TESTS_SKIPPED=0
# Log file
TEST_LOG="/tmp/tools-func-test-$(date +%Y%m%d-%H%M%S).log"
echo -e "${CYAN}═══════════════════════════════════════════════════════════${NC}"
echo -e "${CYAN} TOOLS.FUNC TEST SUITE${NC}"
echo -e "${CYAN}═══════════════════════════════════════════════════════════${NC}"
echo -e "Log file: ${TEST_LOG}\n"
# Source tools.func from repository
echo -e "${BLUE}► Sourcing tools.func from repository...${NC}"
if ! source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/tools.func); then
echo -e "${RED}✖ Failed to source tools.func${NC}"
exit 1
fi
echo -e "${GREEN}✔ tools.func loaded${NC}\n"
# Source core functions if available
if curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/core.func &>/dev/null; then
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/core.func) || true
fi
# Define STD if not already defined
STD="${STD:-&>/dev/null}"
# Helper functions
msg_info() { echo -e "${BLUE} ${1}${NC}"; }
msg_ok() { echo -e "${GREEN}${1}${NC}"; }
msg_error() { echo -e "${RED}${1}${NC}"; }
msg_warn() { echo -e "${YELLOW}${1}${NC}"; }
# Test validation function
test_function() {
local test_name="$1"
local test_command="$2"
local validation_cmd="${3:-}"
echo -e "\n${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${CYAN}Testing: ${test_name}${NC}"
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
{
echo "=== Test: ${test_name} ==="
echo "Command: ${test_command}"
echo "Started: $(date)"
} >>"$TEST_LOG"
if eval "$test_command" >>"$TEST_LOG" 2>&1; then
if [[ -n "$validation_cmd" ]]; then
if eval "$validation_cmd" >>"$TEST_LOG" 2>&1; then
local output
output=$(eval "$validation_cmd" 2>&1 | head -n1)
msg_ok "${test_name} - ${output}"
((TESTS_PASSED++))
else
msg_error "${test_name} - Installation succeeded but validation failed"
((TESTS_FAILED++))
fi
else
msg_ok "${test_name}"
((TESTS_PASSED++))
fi
else
msg_error "${test_name} - Installation failed"
((TESTS_FAILED++))
fi
echo "Completed: $(date)" >>"$TEST_LOG"
echo "" >>"$TEST_LOG"
}
# Skip test with reason
skip_test() {
local test_name="$1"
local reason="$2"
echo -e "\n${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${CYAN}Testing: ${test_name}${NC}"
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
msg_warn "Skipped: ${reason}"
((TESTS_SKIPPED++))
}
# Update system
msg_info "Updating system packages"
apt-get update &>/dev/null && msg_ok "System updated"
# Install base dependencies
msg_info "Installing base dependencies"
apt-get install -y curl wget gpg jq git build-essential ca-certificates &>/dev/null && msg_ok "Base dependencies installed"
# ==============================================================================
# TEST 1: YQ - YAML Processor
# ==============================================================================
test_function "YQ" \
"setup_yq" \
"yq --version"
# ==============================================================================
# TEST 2: ADMINER - Database Management
# ==============================================================================
test_function "Adminer" \
"setup_adminer" \
"test -f /usr/share/adminer/latest.php && echo 'Adminer installed'"
# ==============================================================================
# TEST 3: LOCAL IP HELPER
# ==============================================================================
test_function "Local IP Helper" \
"setup_local_ip_helper" \
"systemctl is-enabled local-ip-helper.service &>/dev/null && echo 'Service enabled'"
# ==============================================================================
# TEST 4: CLICKHOUSE
# ==============================================================================
test_function "ClickHouse" \
"setup_clickhouse" \
"clickhouse-server --version"
# ==============================================================================
# TEST 5: POSTGRESQL
# ==============================================================================
test_function "PostgreSQL 17" \
"PG_VERSION=17 setup_postgresql" \
"psql --version"
# ==============================================================================
# TEST 6: MARIADB
# ==============================================================================
test_function "MariaDB 11.4" \
"MARIADB_VERSION=11.4 setup_mariadb" \
"mariadb --version"
# ==============================================================================
# TEST 7: MYSQL (Remove MariaDB first)
# ==============================================================================
msg_info "Removing MariaDB before MySQL installation"
systemctl stop mariadb &>/dev/null || true
apt-get purge -y mariadb-server mariadb-client mariadb-common &>/dev/null || true
apt-get autoremove -y &>/dev/null
rm -rf /etc/mysql /var/lib/mysql
msg_ok "MariaDB removed"
test_function "MySQL 8.0" \
"MYSQL_VERSION=8.0 setup_mysql" \
"mysql --version"
# ==============================================================================
# TEST 8: MONGODB (Check AVX support)
# ==============================================================================
if grep -q avx /proc/cpuinfo; then
test_function "MongoDB 8.0" \
"MONGO_VERSION=8.0 setup_mongodb" \
"mongod --version"
else
skip_test "MongoDB 8.0" "CPU does not support AVX"
fi
# ==============================================================================
# TEST 9: NODE.JS
# ==============================================================================
test_function "Node.js 22 with modules" \
"NODE_VERSION=22 NODE_MODULE='yarn,pnpm@10.1.0,pm2' setup_nodejs" \
"node --version && npm --version && yarn --version && pnpm --version && pm2 --version"
# ==============================================================================
# TEST 10: PYTHON (UV)
# ==============================================================================
test_function "Python 3.12 via uv" \
"PYTHON_VERSION=3.12 setup_uv" \
"uv --version"
# ==============================================================================
# TEST 11: PHP
# ==============================================================================
test_function "PHP 8.3 with FPM" \
"PHP_VERSION=8.3 PHP_FPM=YES PHP_MODULE='redis,imagick,apcu,zip,mbstring' setup_php" \
"php --version"
# ==============================================================================
# TEST 12: COMPOSER
# ==============================================================================
test_function "Composer" \
"setup_composer" \
"composer --version"
# ==============================================================================
# TEST 13: JAVA
# ==============================================================================
test_function "Java Temurin 21" \
"JAVA_VERSION=21 setup_java" \
"java --version"
# ==============================================================================
# TEST 14: GO
# ==============================================================================
test_function "Go (latest)" \
"GO_VERSION=latest setup_go" \
"go version"
# ==============================================================================
# TEST 15: RUBY
# ==============================================================================
test_function "Ruby 3.4.1 with Rails" \
"RUBY_VERSION=3.4.1 RUBY_INSTALL_RAILS=true setup_ruby" \
"ruby --version"
# ==============================================================================
# TEST 16: RUST
# ==============================================================================
test_function "Rust (stable)" \
"RUST_TOOLCHAIN=stable RUST_CRATES='cargo-edit' setup_rust" \
"source \$HOME/.cargo/env && rustc --version"
# ==============================================================================
# TEST 17: GHOSTSCRIPT
# ==============================================================================
test_function "Ghostscript" \
"setup_gs" \
"gs --version"
# ==============================================================================
# TEST 18: IMAGEMAGICK
# ==============================================================================
test_function "ImageMagick" \
"setup_imagemagick" \
"magick --version"
# ==============================================================================
# TEST 19: FFMPEG
# ==============================================================================
test_function "FFmpeg n7.1.1 (full)" \
"FFMPEG_VERSION=n7.1.1 FFMPEG_TYPE=full setup_ffmpeg" \
"ffmpeg -version"
# ==============================================================================
# FINAL SUMMARY
# ==============================================================================
echo -e "\n${CYAN}═══════════════════════════════════════════════════════════${NC}"
echo -e "${CYAN} TEST SUMMARY${NC}"
echo -e "${CYAN}═══════════════════════════════════════════════════════════${NC}"
echo -e "${GREEN}✔ Passed: ${TESTS_PASSED}${NC}"
echo -e "${RED}✖ Failed: ${TESTS_FAILED}${NC}"
echo -e "${YELLOW}⚠ Skipped: ${TESTS_SKIPPED}${NC}"
echo -e "\nDetailed log: ${TEST_LOG}"
# Generate summary report
{
echo ""
echo "=== FINAL SUMMARY ==="
echo "Tests Passed: ${TESTS_PASSED}"
echo "Tests Failed: ${TESTS_FAILED}"
echo "Tests Skipped: ${TESTS_SKIPPED}"
echo ""
echo "=== Installed Versions ==="
command -v yq &>/dev/null && echo "yq: $(yq --version 2>&1)"
command -v clickhouse-server &>/dev/null && echo "ClickHouse: $(clickhouse-server --version 2>&1 | head -n1)"
command -v psql &>/dev/null && echo "PostgreSQL: $(psql --version)"
command -v mysql &>/dev/null && echo "MySQL: $(mysql --version)"
command -v mongod &>/dev/null && echo "MongoDB: $(mongod --version 2>&1 | head -n1)"
command -v node &>/dev/null && echo "Node.js: $(node --version)"
command -v php &>/dev/null && echo "PHP: $(php --version | head -n1)"
command -v java &>/dev/null && echo "Java: $(java --version 2>&1 | head -n1)"
command -v go &>/dev/null && echo "Go: $(go version)"
command -v ruby &>/dev/null && echo "Ruby: $(ruby --version)"
command -v rustc &>/dev/null && echo "Rust: $(rustc --version)"
command -v ffmpeg &>/dev/null && echo "FFmpeg: $(ffmpeg -version 2>&1 | head -n1)"
} >>"$TEST_LOG"
if [ $TESTS_FAILED -eq 0 ]; then
echo -e "\n${GREEN}All tests completed successfully!${NC}"
exit 0
else
echo -e "\n${RED}Some tests failed. Check the log for details.${NC}"
exit 1
fi