Rename bash-helper.sh -> super-man.sh and update all docs/tests to the super-man name and alias. In interactive mode, pressing Esc in the flag browser now returns directly to the home menu, removing the intermediary "Press Enter to search another command" prompt. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
14 KiB
Super Man Test Suite
Comprehensive testing framework for Super Man with performance analysis and automated reporting.
Overview
This test suite provides:
- Automated testing for all operating modes
- Performance benchmarking with statistical analysis
- Interactive mode testing using expect automation
- Detailed reporting in JSON, Markdown, and HTML formats
- CI/CD integration support
Quick Start
Run All Tests
cd tests/
./run-all-tests.sh
This will:
- Run all non-interactive mode tests
- Run interactive mode tests (if fzf available)
- Generate performance benchmarks
- Create comprehensive reports
Run Specific Test Suites
# Test non-interactive modes only
./test-all-modes.sh
# Test interactive mode only
./test-interactive-mode.sh
# Analyze performance data
./analyze-performance.sh
Test Suite Structure
tests/
├── run-all-tests.sh # Master test runner
├── test-all-modes.sh # Non-interactive mode tests
├── test-interactive-mode.sh # Interactive mode tests
├── test-framework.sh # Testing utilities & framework
├── analyze-performance.sh # Performance analysis tool
├── logs/ # Test execution logs
│ ├── test_*.log # Individual test logs
│ └── test-report.json # JSON test results
├── performance/ # Performance data
│ └── benchmarks.csv # Benchmark results
└── reports/ # Generated reports
├── performance-report.md # Markdown report
├── performance-report.html # HTML report
└── ci-report.txt # CI/CD compatible report
Test Coverage
Non-Interactive Modes
Help & Informational
--help/-h- Help display with ASCII banner--list/-l- List all commands
Natural Language Queries
ask "query"- Database search (5 test cases)task "description"- Task search (2 test cases)
Category Browsing
category files- File operationscategory text- Text processingcategory network- Network operationscategory system- System monitoringcategory- List all categories- Invalid category handling
Command Explanation
explain "command"- Command breakdown (4 test cases)
Direct Flag Lookup
command filter- Flag search (6 test cases)- Command without filter
AI Mode (if available)
ai "query"- AI-powered command generation (3 test cases with 30s timeout)
Error Handling
- Invalid mode
- Empty queries
- Special characters
- Long queries
Interactive Mode Tests
Functionality Tests
- Launch and Exit - Verify interactive mode starts
- Command Selection - Select command and view flags
- Filtering - Filter commands by category/keyword
- Multiple Commands - Test ls, tar, find selections
Performance Tests
- Startup time benchmarking (5 iterations)
- Average response time analysis
Performance Benchmarks
Targets
| Mode | Target | Typical |
|---|---|---|
| Database search | <100ms | ~50ms |
| Category browse | <100ms | ~30ms |
| Direct lookup | <200ms | ~100ms |
| Help display | <100ms | ~20ms |
| Interactive startup | <100ms | ~50ms |
| AI mode (first) | <20s | 5-15s |
| AI mode (cached) | <5s | 1-3s |
Metrics Collected
For each test:
- Execution time (milliseconds)
- Exit code (success/failure)
- Output validation (content checks)
For benchmarks (10 iterations):
- Average time
- Min/Max times
- Success rate
- Standard deviation
Reports
JSON Report (logs/test-report.json)
{
"timestamp": "2025-01-XX XX:XX:XX",
"summary": {
"total": 45,
"passed": 43,
"failed": 0,
"skipped": 2
},
"tests": [
{
"name": "Ask mode - find large files",
"result": "PASSED",
"duration_ms": 52
}
]
}
Performance Report (reports/performance-report.md)
Markdown report with:
- Benchmark results table
- Performance targets comparison
- Summary statistics
- Historical trends
HTML Report (reports/performance-report.html)
Interactive HTML dashboard with:
- Visual metrics
- Color-coded results
- Responsive design
- Print-friendly layout
Requirements
Required
- bash 4.0+ - Shell interpreter
- super-man.sh - Script being tested
Optional
- jq - JSON parsing (for detailed analysis)
- fzf - Fuzzy finder (for interactive tests)
- expect - Interactive automation (auto-installed if missing)
- ollama - AI integration (for AI mode tests)
- bc - Calculator (for percentage calculations)
Installing Dependencies
# Ubuntu/Debian
sudo apt-get install -y jq fzf expect bc
# Fedora/RHEL
sudo dnf install -y jq fzf expect bc
# macOS
brew install jq fzf expect bc
Usage Examples
Basic Test Run
./run-all-tests.sh
Output:
═══════════════════════════════════════════════════════════
Super Man Test Suite
2025-01-XX XX:XX:XX
═══════════════════════════════════════════════════════════
▶ Testing: Help & Informational Modes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Test #1: Help display (--help)
✓ PASSED (45ms) - Output contains: "Super Man"
Test #2: List all commands (--list)
✓ PASSED (32ms) - Output contains: "Available commands"
...
═══════════════════════════════════════════════════════════
Test Summary
═══════════════════════════════════════════════════════════
Results:
Total Tests: 45
Passed: 43
Failed: 0
Skipped: 2
Pass Rate: 95%
Run Specific Mode Tests
# Test only natural language queries
./test-all-modes.sh 2>&1 | grep -A 20 "Natural Language"
# Test only AI mode
./test-all-modes.sh 2>&1 | grep -A 10 "AI Mode"
Performance Analysis
./analyze-performance.sh
Output:
═══════════════════════════════════════════════════════════
Super Man Performance Analysis
2025-01-XX XX:XX:XX
═══════════════════════════════════════════════════════════
Benchmark Analysis
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Ask mode - find large files
Timestamp: 2025-01-XX XX:XX:XX
Average: 48ms
Range: 42ms - 55ms
Success: 10/10 iterations
CI/CD Integration
# Run tests and capture exit code
./run-all-tests.sh
EXIT_CODE=$?
# Check CI report
cat reports/ci-report.txt
# Exit with test result code
exit $EXIT_CODE
Continuous Integration
GitHub Actions Example
name: Test Super Man
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y jq fzf expect bc
- name: Run tests
run: |
cd tests/
./run-all-tests.sh
- name: Upload test results
if: always()
uses: actions/upload-artifact@v3
with:
name: test-results
path: tests/reports/
Gitea CI Example
# .gitea/workflows/test.yml
name: Test Suite
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Run tests
run: |
cd tests/
./run-all-tests.sh
- name: Publish results
if: always()
run: |
echo "Test results:"
cat tests/reports/ci-report.txt
Troubleshooting
Tests Fail to Run
Problem: bash: ./run-all-tests.sh: Permission denied
Solution:
chmod +x tests/*.sh
Interactive Tests Fail
Problem: Interactive tests skip or fail
Reasons:
fzfnot installedexpectnot installed- Running in non-interactive environment
Solution:
# Install dependencies
sudo apt-get install -y fzf expect
# Check if interactive shell
echo $- # Should contain 'i'
AI Tests Skipped
Problem: AI mode tests are skipped
Reasons:
- Ollama not installed
- NL2SH model not available
Solution:
# Install Ollama
curl -fsSL https://ollama.ai/install.sh | sh
# Pull NL2SH model
ollama pull westenfelder/NL2SH
Performance Benchmarks Too Slow
Problem: Tests take too long
Solutions:
- Reduce iteration count in benchmark calls
- Skip AI tests (they take 5-15s per query)
- Run specific test suites instead of all tests
Edit iterations:
# In test scripts, change:
run_benchmark "test name" "command" 10
# to:
run_benchmark "test name" "command" 3
JSON Report Not Generated
Problem: jq not available
Solution:
sudo apt-get install -y jq
Advanced Usage
Custom Test Configuration
Create tests/config.sh:
# Test configuration
export TEST_TIMEOUT=30
export BENCHMARK_ITERATIONS=10
export SKIP_AI_TESTS=false
export SKIP_INTERACTIVE_TESTS=false
Add Custom Tests
- Create test file:
cd tests/
cat > test-custom.sh << 'EOF'
#!/bin/bash
source ./test-framework.sh
print_header
print_section "Custom Tests"
run_test_with_output_check \
"My custom test" \
"../super-man.sh ask 'my query'" \
"expected output"
print_summary
EOF
chmod +x test-custom.sh
- Run custom test:
./test-custom.sh
Parallel Test Execution
# Run multiple test suites in parallel
./test-all-modes.sh &
./test-interactive-mode.sh &
wait
# Analyze results
./analyze-performance.sh
Export Test Data
# Export to CSV
./run-all-tests.sh
cat performance/benchmarks.csv | column -t -s '|'
# Export to JSON
cat logs/test-report.json | jq '.'
Test Framework API
Core Functions
run_test(name, command, expected_exit_code, timeout)
Run test with basic exit code checking.
run_test "Test name" "command to run" 0 10
run_test_with_output_check(name, command, expected_string, timeout)
Run test and verify output contains expected string.
run_test_with_output_check \
"Help test" \
"./super-man.sh --help" \
"Super Man"
run_benchmark(name, command, iterations)
Run performance benchmark with statistics.
run_benchmark "Ask mode" "./super-man.sh ask 'test'" 10
skip_test(name, reason)
Skip test with reason.
skip_test "AI mode" "Ollama not available"
Contributing Tests
Adding New Test Cases
- Identify test category (help, ask, explain, etc.)
- Add test to appropriate section in
test-all-modes.sh - Follow naming convention:
Mode - specific test case - Include output validation
- Document expected behavior
Example:
run_test_with_output_check \
"Ask mode - new test case" \
"$SCRIPT_PATH ask 'new query'" \
"expected output keyword"
Testing Checklist
Before submitting:
- Test passes locally
- Test has unique, descriptive name
- Output validation is specific
- Timeout is appropriate (10s default, 30s for AI)
- Test doesn't require manual interaction
- Dependencies are documented
Maintenance
Cleaning Test Data
# Remove all logs and reports
rm -rf tests/logs/* tests/performance/* tests/reports/*
# Run fresh test
./run-all-tests.sh
Archiving Test Results
# Archive with timestamp
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
tar -czf test-results-$TIMESTAMP.tar.gz \
tests/logs tests/performance tests/reports
# Move to archive directory
mkdir -p archive/
mv test-results-$TIMESTAMP.tar.gz archive/
Performance Tuning
Speed Up Tests
-
Skip slow tests:
# Comment out AI tests if not needed # Comment out benchmark sections -
Reduce iterations:
# Change from 10 to 3 iterations run_benchmark "test" "command" 3 -
Parallel execution:
./test-all-modes.sh & ./test-interactive-mode.sh & wait
Optimize for CI/CD
# Fast CI mode
export TEST_TIMEOUT=5
export BENCHMARK_ITERATIONS=3
export SKIP_AI_TESTS=true
./run-all-tests.sh
FAQ
Q: How long do tests take? A: ~2-3 minutes for all tests (5-10 minutes with AI tests)
Q: Can I run tests in parallel? A: Yes, but be careful with shared resources (log files, etc.)
Q: Do I need root access? A: No, unless installing dependencies
Q: Will tests modify my system? A: No, tests only read/execute super-man.sh
Q: Can I run tests on macOS? A: Yes, with dependencies installed via Homebrew
Q: How do I debug a failing test?
A: Check tests/logs/test_N_*.log for detailed output
Version History
v1.0.0 (Current)
- Initial test framework
- 45+ test cases across all modes
- Performance benchmarking
- Interactive mode automation
- Comprehensive reporting (JSON, MD, HTML)
- CI/CD integration support
License
Same as Super Man - see main repository
Support
- Issues: Report via Gitea issue tracker
- Documentation: See main repository README
- Questions: Check FAQ above or test logs
Super Man Test Suite v1.0.0
Ensuring quality and performance at every commit! 🚀