#!/bin/bash # Logging utilities for archsetup testing # Author: Craig Jennings # License: GNU GPLv3 # Global log file (set by calling script) LOGFILE="${LOGFILE:-/tmp/archsetup-test.log}" # Initialize logging init_logging() { local logfile="$1" LOGFILE="$logfile" # Create log directory if it doesn't exist mkdir -p "$(dirname "$LOGFILE")" # Initialize log file echo "=== Test Log Started: $(date +'%Y-%m-%d %H:%M:%S') ===" > "$LOGFILE" echo "" >> "$LOGFILE" } # Log message (to file and optionally stdout) log() { local message="$1" local timestamp timestamp=$(date +'%Y-%m-%d %H:%M:%S') echo "[$timestamp] $message" >> "$LOGFILE" } # Info message info() { local message="$1" echo "[i] $message" log "INFO: $message" } # Success message success() { local message="$1" echo "[✓] $message" log "SUCCESS: $message" } # Warning message warn() { local message="$1" echo "[!] $message" log "WARNING: $message" } # Error message error() { local message="$1" echo "[✗] $message" >&2 log "ERROR: $message" } # Fatal error (exits script) fatal() { local message="$1" local exit_code="${2:-1}" echo "[✗] FATAL: $message" >&2 log "FATAL: $message (exit code: $exit_code)" exit "$exit_code" } # Section header section() { local title="$1" echo "" echo "=== $title ===" log "=== $title ===" } # Step message step() { local message="$1" echo " -> $message" log " STEP: $message" } # Progress indicator (for long-running operations) progress() { local message="$1" echo " ... $message" log " PROGRESS: $message" } # Clear progress line and show completion complete() { local message="$1" echo " [✓] $message" log " COMPLETE: $message" } # Show command being executed (useful for debugging) show_cmd() { local cmd="$1" echo "$ $cmd" log "CMD: $cmd" } # Separator line separator() { echo "----------------------------------------" } # Summary statistics summary() { local passed="$1" local failed="$2" local total=$((passed + failed)) echo "" separator section "Test Summary" echo " Total: $total" echo " Passed: $passed" echo " Failed: $failed" separator echo "" log "=== Test Summary ===" log "Total: $total, Passed: $passed, Failed: $failed" } # Timer utilities declare -A TIMERS start_timer() { local name="${1:-default}" TIMERS[$name]=$(date +%s) log "TIMER START: $name" } stop_timer() { local name="${1:-default}" local start=${TIMERS[$name]} local end=$(date +%s) local duration=$((end - start)) local mins=$((duration / 60)) local secs=$((duration % 60)) if [ $mins -gt 0 ]; then echo " Time: ${mins}m ${secs}s" log "TIMER STOP: $name (${mins}m ${secs}s)" else echo " Time: ${secs}s" log "TIMER STOP: $name (${secs}s)" fi }