#!/bin/bash # Master verification script that runs all installation tests # and generates a comprehensive report set -e # Source common functions SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/common.sh" log_section "Claude Code Suite - Comprehensive Installation Test" RESULTS_DIR="$HOME/test-results" mkdir -p "$RESULTS_DIR" FINAL_REPORT="$RESULTS_DIR/final-report-$(date +%Y%m%d-%H%M%S).txt" # Initialize counters TOTAL_TESTS=0 TOTAL_PASSED=0 TOTAL_FAILED=0 TOTAL_WARNINGS=0 # Array to store test results declare -a TEST_RESULTS=() # Run a test and capture results run_test() { local test_name="$1" local test_script="$2" log_section "Running: $test_name" # Reset counters TESTS_PASSED=0 TESTS_FAILED=0 TESTS_WARNINGS=0 # Run the test if bash "$test_script"; then TEST_RESULTS+=("✅ $test_name: PASSED") TOTAL_PASSED=$((TOTAL_PASSED + 1)) else TEST_RESULTS+=("❌ $test_name: FAILED") TOTAL_FAILED=$((TOTAL_FAILED + 1)) fi TOTAL_TESTS=$((TOTAL_TESTS + 1)) # Save test counts echo "$test_name:$TESTS_PASSED:$TESTS_FAILED:$TESTS_WARNINGS" >> "$RESULTS_DIR/test-counts.txt" echo "" } # Check if all test scripts exist verify_test_scripts() { log_section "Verifying Test Scripts" local scripts=( "test-interactive-install.sh" "test-master-prompt-install.sh" "test-manual-install.sh" ) for script in "${scripts[@]}"; do if [ -f "$SCRIPT_DIR/$script" ]; then test_pass "Test script found: $script" chmod +x "$SCRIPT_DIR/$script" else test_fail "Test script missing: $script" fi done echo "" } # Generate final report generate_final_report() { log_section "Generating Final Report" cat > "$FINAL_REPORT" << REPORT_EOF ╔═══════════════════════════════════════════════════════════════════════════╗ ║ Claude Code Suite - Installation Test Report ║ ╚═══════════════════════════════════════════════════════════════════════════╝ Test Date: $(date) Docker Image: ubuntu:22.04 Node.js: $(node -v) npm: $(npm -v) Python: $(python3 --version) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ TEST RESULTS SUMMARY: Total Installation Methods Tested: $TOTAL_TESTS Passed: $TOTAL_PASSED Failed: $TOTAL_FAILED ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DETAILED RESULTS: REPORT_EOF # Add each test result for result in "${TEST_RESULTS[@]}"; do echo "$result" >> "$FINAL_REPORT" done cat >> "$FINAL_REPORT" << REPORT_EOF2 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ COMPONENT VERIFICATION: REPORT_EOF2 # Read individual test counts if [ -f "$RESULTS_DIR/test-counts.txt" ]; then while IFS=: read -r test_name passed failed warnings; do echo "" >> "$FINAL_REPORT" echo "$test_name:" >> "$FINAL_REPORT" echo " Passed: $passed" >> "$FINAL_REPORT" echo " Failed: $failed" >> "$FINAL_REPORT" echo " Warnings: $warnings" >> "$FINAL_REPORT" done < "$RESULTS_DIR/test-counts.txt" fi cat >> "$FINAL_REPORT" << REPORT_EOF3 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ CONCLUSION: REPORT_EOF3 if [ $TOTAL_FAILED -eq 0 ]; then cat >> "$FINAL_REPORT" << 'PASS_EOF' ✅ ALL INSTALLATION METHODS TESTED SUCCESSFULLY All three installation methods (Interactive, Master Prompt, and Manual) have been tested and verified to work correctly in a clean Docker environment. Recommendation: All installation methods are PRODUCTION READY ✓ PASS_EOF else cat >> "$FINAL_REPORT" << 'FAIL_EOF' ❌ SOME INSTALLATION METHODS FAILED One or more installation methods failed testing. Please review the detailed results above and fix any issues before deployment. Action Required: Review failed tests and fix installation scripts. FAIL_EOF fi cat >> "$FINAL_REPORT" << REPORT_END ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ For detailed logs, see: $RESULTS_DIR/test-*.log ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ REPORT_END # Display report cat "$FINAL_REPORT" # Also save to stdout for capture log_info "Final report saved to: $FINAL_REPORT" } # Main execution main() { # Verify test scripts exist verify_test_scripts # Run all tests (in separate container instances ideally, but sequentially here) # Note: In production, you'd run each in a fresh container # For now, we'll run them sequentially with cleanup between tests # Test 1: Interactive Installer if [ -f "$SCRIPT_DIR/test-interactive-install.sh" ]; then run_test "Interactive Installer" "$SCRIPT_DIR/test-interactive-install.sh" fi # Test 2: Master Prompt if [ -f "$SCRIPT_DIR/test-master-prompt-install.sh" ]; then run_test "Master Prompt Installation" "$SCRIPT_DIR/test-master-prompt-install.sh" fi # Test 3: Manual Installation if [ -f "$SCRIPT_DIR/test-manual-install.sh" ]; then run_test "Manual Installation" "$SCRIPT_DIR/test-manual-install.sh" fi # Generate final report generate_final_report # Exit with appropriate code if [ $TOTAL_FAILED -eq 0 ]; then log_success "All installation tests passed! ✅" exit 0 else log_error "Some installation tests failed! ❌" exit 1 fi } # Run main main "$@"