#!/bin/bash ############################################################################### # TEST LAUNCHER - Cross-Platform Verification # Tests multi-platform reference database building without modifying launcher.sh ############################################################################### # Get script directory SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" export TOOLKIT_BASE_DIR="$SCRIPT_DIR" # Source libraries LIB_DIR="$SCRIPT_DIR/lib" source "$LIB_DIR/common-functions.sh" source "$LIB_DIR/system-detect.sh" source "$LIB_DIR/domain-discovery.sh" source "$LIB_DIR/user-manager.sh" # Test database location TEST_SYSREF_DB="${TOOLKIT_BASE_DIR}/.sysref-test" TEST_SYSREF_TIMESTAMP="${TOOLKIT_BASE_DIR}/.sysref-test.timestamp" ############################################################################### # PLATFORM-SPECIFIC DOMAIN BUILDERS ############################################################################### build_domains_cpanel_test() { print_info "Using cPanel-optimized domain discovery..." local users=($(list_all_users)) local current=0 local total=0 # Count domains for user in "${users[@]}"; do local userdata_dir="${SYS_CPANEL_USERDATA_DIR:-/var/cpanel/userdata}/${user}" if [ -d "$userdata_dir" ]; then total=$((total + $(find "$userdata_dir" -type f ! -name "*.cache" ! -name "*.yaml" ! -name "*.json" ! -name "main*" ! -name "cache" ! -name "*_SSL" 2>/dev/null | wc -l))) fi done # Process domains declare -A seen_domains for user in "${users[@]}"; do local userdata_dir="${SYS_CPANEL_USERDATA_DIR:-/var/cpanel/userdata}/${user}" if [ -d "$userdata_dir" ]; then for config_file in "$userdata_dir"/*; do [ ! -f "$config_file" ] && continue local basename=$(basename "$config_file") # Skip cache files [[ "$basename" =~ \.cache$|\.yaml$|\.json$|^main|^cache$|_SSL$ ]] && continue local domain="$basename" local doc_root=$(grep "^documentroot:" "$config_file" | awk '{print $2}' || true) local log_path=$(grep "target:.*domlogs" "$config_file" | head -1 | awk '{print $2}' || true) local php_version=$(grep "^phpversion:" "$config_file" | awk '{print $2}' || true) current=$((current + 1)) show_progress $current $total "Processing cPanel domains..." echo "DOMAIN|$domain|$user|$doc_root|$log_path|$php_version|cpanel" >> "$TEST_SYSREF_DB" seen_domains["$domain"]=1 done fi done finish_progress } build_domains_plesk_test() { print_info "Using Plesk-specific domain discovery..." local all_domains=$(list_all_domains) local domain_count=$(echo "$all_domains" | wc -w) local current=0 for domain in $all_domains; do [ -z "$domain" ] && continue ((current++)) show_progress $current $domain_count "Processing Plesk domains..." # Use panel-agnostic functions that call Plesk helpers local owner=$(get_domain_owner "$domain" || echo "unknown") local docroot=$(get_domain_docroot "$domain" || echo "") local logdir=$(get_domain_logdir "$domain" || echo "") local access_log=$(get_domain_access_log "$domain" || echo "") # Try to get PHP version if plesk helper exists local php_version="" if type plesk_get_php_version >/dev/null 2>&1; then php_version=$(plesk_get_php_version "$domain" || echo "") fi echo "DOMAIN|$domain|$owner|$docroot|$logdir|$access_log|$php_version|plesk" >> "$TEST_SYSREF_DB" done finish_progress } build_domains_standalone_test() { print_info "Using standalone domain discovery..." local all_domains=$(list_all_domains) local domain_count=$(echo "$all_domains" | wc -w) local current=0 if [ -z "$all_domains" ]; then print_warning "No domains found via directory scanning" return fi for domain in $all_domains; do [ -z "$domain" ] && continue ((current++)) show_progress $current $domain_count "Processing standalone domains..." local docroot=$(get_domain_docroot "$domain" || echo "") local owner=$(get_domain_owner "$domain" || echo "unknown") local logdir=$(get_domain_logdir "$domain" || echo "") local access_log=$(get_domain_access_log "$domain" || echo "") echo "DOMAIN|$domain|$owner|$docroot|$logdir|$access_log||standalone" >> "$TEST_SYSREF_DB" done finish_progress } ############################################################################### # MAIN TEST FUNCTION ############################################################################### test_reference_database() { local start_time=$(date +%s) print_header "Cross-Platform Reference Database Test" echo "" # Show detected platform print_info "Detected Platform: $SYS_CONTROL_PANEL" print_info "OS: $SYS_OS_TYPE $SYS_OS_VERSION" print_info "Web Server: $SYS_WEB_SERVER $SYS_WEB_SERVER_VERSION" print_info "Database: $SYS_DB_TYPE $SYS_DB_VERSION" print_info "User Home Base: $SYS_USER_HOME_BASE" print_info "Log Directory: $SYS_LOG_DIR" echo "" # Initialize test database print_info "Building test reference database..." echo "# Test System Reference Database" > "$TEST_SYSREF_DB" echo "# Platform: $SYS_CONTROL_PANEL" >> "$TEST_SYSREF_DB" echo "# Generated: $(date)" >> "$TEST_SYSREF_DB" echo "" >> "$TEST_SYSREF_DB" # Test users echo "[USERS]" >> "$TEST_SYSREF_DB" local users=($(list_all_users)) print_info "Found ${#users[@]} users" for user in "${users[@]}"; do echo "USER|$user" >> "$TEST_SYSREF_DB" done echo "" >> "$TEST_SYSREF_DB" # Test domains - platform-specific echo "[DOMAINS]" >> "$TEST_SYSREF_DB" case "$SYS_CONTROL_PANEL" in cpanel) build_domains_cpanel_test ;; plesk) build_domains_plesk_test ;; interworx) print_warning "InterWorx support not yet implemented in test" build_domains_standalone_test ;; *) build_domains_standalone_test ;; esac echo "" >> "$TEST_SYSREF_DB" # Test databases echo "[DATABASES]" >> "$TEST_SYSREF_DB" if [ "$SYS_DB_TYPE" != "none" ]; then local all_dbs=$(mysql -Ns -e "SHOW DATABASES" 2>/dev/null | grep -v "^information_schema$\|^mysql$\|^performance_schema$\|^sys$" || true) local db_count=$(echo "$all_dbs" | wc -l) print_info "Found $db_count databases" for db in $all_dbs; do local owner=$(get_database_owner "$db" || echo "unknown") echo "DB|$db|$owner" >> "$TEST_SYSREF_DB" done fi echo "" >> "$TEST_SYSREF_DB" # Save timestamp date +%s > "$TEST_SYSREF_TIMESTAMP" local end_time=$(date +%s) local duration=$((end_time - start_time)) echo "" print_success "Test database built in ${duration}s" print_info "Test database location: $TEST_SYSREF_DB" echo "" # Show statistics local user_count=$(grep -c "^USER|" "$TEST_SYSREF_DB" 2>/dev/null || echo 0) local domain_count=$(grep -c "^DOMAIN|" "$TEST_SYSREF_DB" 2>/dev/null || echo 0) local db_count=$(grep -c "^DB|" "$TEST_SYSREF_DB" 2>/dev/null || echo 0) print_header "Test Results" echo " Users: $user_count" echo " Domains: $domain_count" echo " Databases: $db_count" echo "" # Show sample domains if [ "$domain_count" -gt 0 ]; then print_header "Sample Domain Entries (first 5)" grep "^DOMAIN|" "$TEST_SYSREF_DB" | head -5 | while IFS='|' read -r type domain owner docroot logdir access_log php platform; do echo " Domain: $domain" echo " Owner: $owner" echo " Docroot: $docroot" echo " Platform: $platform" echo "" done fi # Compare with production database if it exists if [ -f "$TOOLKIT_BASE_DIR/.sysref" ]; then echo "" print_header "Comparison with Production Database" local prod_users=$(grep -c "^USER|" "$TOOLKIT_BASE_DIR/.sysref" 2>/dev/null || echo 0) local prod_domains=$(grep -c "^DOMAIN|" "$TOOLKIT_BASE_DIR/.sysref" 2>/dev/null || echo 0) local prod_dbs=$(grep -c "^DB|" "$TOOLKIT_BASE_DIR/.sysref" 2>/dev/null || echo 0) echo " Production: $prod_users users, $prod_domains domains, $prod_dbs databases" echo " Test: $user_count users, $domain_count domains, $db_count databases" echo "" if [ "$user_count" -eq "$prod_users" ] && [ "$domain_count" -eq "$prod_domains" ]; then print_success "✅ Counts match! Test successful." else print_warning "⚠️ Counts differ - this may be expected for cross-platform changes" fi fi echo "" print_info "Test database saved to: $TEST_SYSREF_DB" print_info "You can inspect it with: cat $TEST_SYSREF_DB" } ############################################################################### # RUN TEST ############################################################################### # Clear screen and run clear test_reference_database # Instructions echo "" print_header "Next Steps" echo "1. Review the test database: cat $TEST_SYSREF_DB" echo "2. If results look good on this cPanel server, test on Plesk:" echo " - git pull on Plesk server" echo " - bash test-launcher.sh" echo " - Verify domains/users/databases are detected" echo "3. If Plesk test succeeds, we can integrate into main launcher" echo ""