Files
dbbackup/TEST_PLAN.md
Renz cd948e84f1 fix: Implement database creation in RestoreSingle
BUG #1: restore single --create flag was not implemented
- Added ensureDatabaseExists() call when createIfMissing=true
- Database is now created before restore if --create flag is used
- Added TEST_PLAN.md with comprehensive testing matrix

Tested: restore single --create flag now works correctly
Before: ERROR: database does not exist
After: Database created successfully and restored
2025-11-10 09:03:36 +00:00

11 KiB

DBBackup Comprehensive Test Plan

Date: November 10, 2025
Goal: Test all command-line and interactive functions to ensure stability

Issues Found

🐛 BUG #1: --create flag not implemented in single database restore

Severity: HIGH
Location: internal/restore/engine.go - RestoreSingle() function
Description: The createIfMissing parameter is accepted but never used. Function doesn't create target database.
Expected: When --create flag is used, should create database if it doesn't exist
Actual: Fails with "database does not exist" error
Fix Required: Add database creation logic before restore


Test Matrix

1. BACKUP OPERATIONS

1.1 Single Database Backup

Test Case Command Expected Result Status
Basic backup backup single ownership_test Success PASS
With compression level backup single ownership_test --compression=9 Success with higher compression TODO
With custom backup dir backup single ownership_test --backup-dir=/tmp/backups Success, file in /tmp/backups TODO
Non-existent database backup single nonexistent_db Error: database does not exist TODO
Without permissions backup single postgres (as non-postgres user) Error: authentication failed TODO

1.2 Cluster Backup

Test Case Command Expected Result Status
Basic cluster backup backup cluster Success, all DBs backed up PASS
With parallel jobs backup cluster --jobs=4 Success with 4 parallel jobs TODO
With custom compression backup cluster --compression=1 Fast backup, larger file TODO
Disk space insufficient backup cluster (low disk space) Error: insufficient disk space TODO

2. RESTORE OPERATIONS

2.1 Single Database Restore

Test Case Command Expected Result Status
Basic restore restore single backup.dump --target=test_db --confirm Database exists: Success TODO
With --create flag restore single backup.dump --target=new_db --create --confirm BUG: Database not created BUG #1
With --clean flag restore single backup.dump --target=existing_db --clean --confirm Drop + Restore success TODO
Dry-run mode restore single backup.dump --target=test_db --dry-run Show plan, no changes TODO
Without --confirm restore single backup.dump --target=test_db Show dry-run automatically TODO
Non-existent file restore single /tmp/nonexistent.dump --confirm Error: file not found TODO
Corrupted archive restore single corrupted.dump --confirm Error: invalid archive TODO
Wrong format restore single cluster.tar.gz --confirm Error: not a single DB backup TODO

2.2 Cluster Restore

Test Case Command Expected Result Status
Basic cluster restore restore cluster backup.tar.gz --confirm All DBs restored with ownership PASS
Dry-run mode restore cluster backup.tar.gz --dry-run Show restore plan TODO
Without --confirm restore cluster backup.tar.gz Show dry-run automatically TODO
Non-superuser restore cluster backup.tar.gz --confirm (non-superuser) Warning: limited ownership TODO
Disk space insufficient restore cluster backup.tar.gz --confirm Error: insufficient disk space TODO
With --force flag restore cluster backup.tar.gz --force --confirm Skip safety checks TODO

2.3 Restore List

Test Case Command Expected Result Status
List all backups restore list Show all backup files PASS
List with filter restore list --database=test_db Show only test_db backups TODO
Empty backup dir restore list (no backups) Show "No backups found" TODO

3. STATUS OPERATIONS

Test Case Command Expected Result Status
Basic status status Show database list TODO
Detailed status status --detailed Show with sizes/counts TODO
JSON format status --format=json Valid JSON output TODO
Filter by database status --database=test_db Show only test_db TODO

4. INTERACTIVE MODE (TUI)

4.1 Main Menu Navigation

Test Case Action Expected Result Status
Launch TUI ./dbbackup or ./dbbackup interactive Show main menu TODO
Navigate with arrows Up/Down arrows Highlight moves TODO
Select with Enter Enter key on option Execute option TODO
Quit with q Press 'q' Exit gracefully TODO
Ctrl+C handling Press Ctrl+C Exit gracefully TODO

4.2 Backup Single Database (TUI)

Test Case Action Expected Result Status
Select database Choose from list Database selected TODO
Confirm backup Confirm dialog Backup starts TODO
Cancel backup Cancel dialog Return to menu TODO
Progress display During backup Show progress bar TODO
Completion message After success Show success message TODO
Error handling Backup fails Show error, don't crash TODO

4.3 Backup Cluster (TUI)

Test Case Action Expected Result Status
Confirm cluster backup Confirm dialog Backup all DBs TODO
Progress tracking During backup Show N/M databases TODO
ETA display Long operation Show time remaining TODO
Error on one DB One DB fails Continue with others TODO

4.4 Restore Single Database (TUI)

Test Case Action Expected Result Status
Select archive Choose from list Archive selected TODO
Select target DB Choose/enter name Target selected TODO
Confirm restore Confirm dialog Restore starts TODO
Cancel restore Cancel dialog Return to menu TODO
Progress display During restore Show progress TODO

4.5 Restore Cluster (TUI)

Test Case Action Expected Result Status
Select cluster archive Choose from list Archive selected TODO
Confirm restore Warning + confirm Restore starts TODO
Progress tracking During restore Show N/M databases TODO
Ownership preservation After restore Verify owners correct TODO

4.6 View Status (TUI)

Test Case Action Expected Result Status
Show all databases Select status option List all DBs TODO
Scroll long lists Arrow keys Scroll works TODO
Return to menu Back/Escape Return to main menu TODO

4.7 Operation History (TUI)

Test Case Action Expected Result Status
View history Select history option Show past operations TODO
Navigate history Up/Down arrows Scroll through history TODO
Long operations View 2-hour backup Show correct duration TODO
Empty history First run Show "No history" TODO

5. EDGE CASES & ERROR SCENARIOS

5.1 Authentication & Permissions

Test Case Scenario Expected Result Status
Peer auth mismatch Run as root with --user postgres Show warning, suggest sudo TODO
No password Connect with peer auth Success via Unix socket TODO
Wrong password Connect with bad password Error: authentication failed TODO
No .pgpass file Remote connection Prompt for password TODO

5.2 Disk Space

Test Case Scenario Expected Result Status
Insufficient space Backup when disk full Error before starting TODO
Restore needs space Restore 10GB with 5GB free Error with clear message TODO

5.3 Database State

Test Case Scenario Expected Result Status
Active connections Restore DB with connections Terminate connections first TODO
Database locked Backup locked DB Wait or error gracefully TODO
Corrupted database Backup corrupted DB Warning but continue TODO

5.4 Network & Remote

Test Case Scenario Expected Result Status
Remote host --host=remote.server Connect via TCP TODO
Network timeout Connection hangs Timeout with error TODO
SSL required --ssl-mode=require Connect with SSL TODO

6. CROSS-PLATFORM COMPATIBILITY

Platform Test Status
Linux amd64 All operations TODO
Linux arm64 All operations TODO
macOS Intel All operations TODO
macOS ARM All operations TODO
Windows amd64 All operations TODO

Testing Procedure

Phase 1: Command-Line Testing (Current)

  1. Test basic backup single
  2. Test basic backup cluster
  3. Test restore list
  4. Found BUG #1: restore single --create not working
  5. Test remaining command-line operations

Phase 2: Fix Critical Bugs

  1. Fix BUG #1: Implement database creation in RestoreSingle
  2. Test fix thoroughly
  3. Commit and push

Phase 3: Interactive Mode Testing

  1. Test all TUI menu options
  2. Test navigation and user input
  3. Test progress indicators
  4. Test error handling

Phase 4: Edge Case Testing

  1. Test authentication scenarios
  2. Test disk space limits
  3. Test error conditions
  4. Test concurrent operations

Phase 5: Documentation & Report

  1. Update README with known issues
  2. Create bug fix changelog
  3. Update user documentation
  4. Final stability report

Success Criteria

  • All critical bugs fixed
  • All command-line operations work as documented
  • All interactive operations complete successfully
  • Error messages are clear and helpful
  • No crashes or panics under normal use
  • Cross-platform builds succeed
  • Documentation matches actual behavior

Notes

  • Test with PostgreSQL peer authentication (most common setup)
  • Test with MariaDB/MySQL (ensure no regressions)
  • Test with both superuser and regular user accounts
  • Test with various database sizes (small, medium, large)
  • Test with special characters in database names

Last Updated: November 10, 2025
Test Progress: 3/100+ tests completed
Critical Bugs Found: 1
Status: IN PROGRESS