16 KiB
Production-Ready Testing Plan
Date: November 11, 2025
Version: 1.0
Goal: Verify complete functionality for production deployment
Test Environment Status
- ✅ 7.5GB test database created (
testdb_50gb) - ✅ Multiple test databases (17 total)
- ✅ Test roles and ownership configured (
testowner) - ✅ 107GB available disk space
- ✅ PostgreSQL cluster operational
Phase 1: Command-Line Testing (Critical Path)
1.1 Cluster Backup - Full Test
Priority: CRITICAL
Status: ⚠️ NEEDS COMPLETION
Test Steps:
# Clean environment
sudo rm -rf /var/lib/pgsql/db_backups/.cluster_*
# Execute cluster backup with compression level 6 (production default)
time sudo -u postgres ./dbbackup backup cluster
# Verify output
ls -lh /var/lib/pgsql/db_backups/cluster_*.tar.gz | tail -1
cat /var/lib/pgsql/db_backups/cluster_*.tar.gz.info
Success Criteria:
- All databases backed up successfully (0 failures)
- Archive created (>500MB expected)
- Completion time <15 minutes
- No memory errors in dmesg
- Metadata file created
1.2 Cluster Restore - Full Test with Ownership Verification
Priority: CRITICAL
Status: ⚠️ NOT TESTED
Pre-Test: Document Current Ownership
# Check current ownership across key databases
sudo -u postgres psql -c "\l+" | grep -E "ownership_test|testdb"
# Check table ownership in ownership_test
sudo -u postgres psql -d ownership_test -c \
"SELECT schemaname, tablename, tableowner FROM pg_tables WHERE schemaname = 'public';"
# Check roles
sudo -u postgres psql -c "\du"
Test Steps:
# Get latest cluster backup
BACKUP=$(ls -t /var/lib/pgsql/db_backups/cluster_*.tar.gz | head -1)
# Dry run first
sudo -u postgres ./dbbackup restore cluster "$BACKUP" --dry-run
# Execute restore with confirmation
time sudo -u postgres ./dbbackup restore cluster "$BACKUP" --confirm
# Verify restoration
sudo -u postgres psql -c "\l+" | wc -l
Post-Test: Verify Ownership Preserved
# Check database ownership restored
sudo -u postgres psql -c "\l+" | grep -E "ownership_test|testdb"
# Check table ownership preserved
sudo -u postgres psql -d ownership_test -c \
"SELECT schemaname, tablename, tableowner FROM pg_tables WHERE schemaname = 'public';"
# Verify testowner role exists
sudo -u postgres psql -c "\du" | grep testowner
# Check access privileges
sudo -u postgres psql -l | grep -E "Access privileges"
Success Criteria:
- All databases restored successfully
- Database ownership matches original
- Table ownership preserved (testowner still owns test_data)
- Roles restored from globals.sql
- No permission errors
- Data integrity: row counts match
- Completion time <30 minutes
1.3 Large Database Operations
Priority: HIGH
Status: ✅ COMPLETED (7.5GB single DB)
Additional Test Needed:
# Test single database restore with ownership
BACKUP=/var/lib/pgsql/db_backups/db_testdb_50gb_*.dump
# Drop and recreate to test full cycle
sudo -u postgres psql -c "DROP DATABASE IF EXISTS testdb_50gb_restored;"
# Restore
time sudo -u postgres ./dbbackup restore single "$BACKUP" \
--target testdb_50gb_restored --create --confirm
# Verify size and data
sudo -u postgres psql -d testdb_50gb_restored -c \
"SELECT pg_size_pretty(pg_database_size('testdb_50gb_restored'));"
Success Criteria:
- Restore completes successfully
- Database size matches original (~7.5GB)
- Row counts match (7M+ rows)
- Completion time <25 minutes
1.4 Authentication Methods Testing
Priority: HIGH
Status: ⚠️ NEEDS VERIFICATION
Test Cases:
# Test 1: Peer authentication (current working method)
sudo -u postgres ./dbbackup status
# Test 2: Password authentication (if configured)
./dbbackup status --user postgres --password "$PGPASSWORD"
# Test 3: ~/.pgpass file (if exists)
cat ~/.pgpass
./dbbackup status --user postgres
# Test 4: Environment variable
export PGPASSWORD="test_password"
./dbbackup status --user postgres
unset PGPASSWORD
Success Criteria:
- At least one auth method works
- Error messages are clear and helpful
- Authentication detection working
1.5 Privilege Diagnostic Tool
Priority: MEDIUM
Status: ✅ CREATED, ⚠️ NEEDS EXECUTION
Test Steps:
# Run diagnostic on current system
./privilege_diagnostic.sh > privilege_report_production.txt
# Review output
cat privilege_report_production.txt
# Compare with expectations
grep -A 10 "DATABASE PRIVILEGES" privilege_report_production.txt
Success Criteria:
- Script runs without errors
- Shows all database privileges
- Identifies roles correctly
- globals.sql content verified
Phase 2: Interactive Mode Testing (TUI)
2.1 TUI Launch and Navigation
Priority: HIGH
Status: ⚠️ NOT FULLY TESTED
Test Steps:
# Launch TUI
sudo -u postgres ./dbbackup interactive
# Test navigation:
# - Arrow keys: ↑ ↓ to move through menu
# - Enter: Select option
# - Esc/q: Go back/quit
# - Test all 10 main menu options
Menu Items to Test:
- Single Database Backup
- Sample Database Backup
- Full Cluster Backup
- Restore Single Database
- Restore Cluster Backup
- List Backups
- View Operation History
- Database Status
- Settings
- Exit
Success Criteria:
- TUI launches without errors
- Navigation works smoothly
- No terminal artifacts
- Can navigate back with Esc
- Exit works cleanly
2.2 TUI Cluster Backup
Priority: CRITICAL
Status: ⚠️ ISSUE REPORTED (Enter key not working)
Test Steps:
# Launch TUI
sudo -u postgres ./dbbackup interactive
# Navigate to: Full Cluster Backup (option 3)
# Press Enter to start
# Observe progress indicators
# Wait for completion
Known Issue:
- User reported: "on cluster backup restore selection - i cant press enter to select the cluster backup - interactiv"
Success Criteria:
- Enter key works to select cluster backup
- Progress indicators show during backup
- Backup completes successfully
- Returns to main menu on completion
- Backup file listed in backup directory
2.3 TUI Cluster Restore
Priority: CRITICAL
Status: ⚠️ NEEDS TESTING
Test Steps:
# Launch TUI
sudo -u postgres ./dbbackup interactive
# Navigate to: Restore Cluster Backup (option 5)
# Browse available cluster backups
# Select latest backup
# Press Enter to start restore
# Observe progress indicators
# Wait for completion
Success Criteria:
- Can browse cluster backups
- Enter key works to select backup
- Progress indicators show during restore
- Restore completes successfully
- Ownership preserved
- Returns to main menu on completion
2.4 TUI Database Selection
Priority: HIGH
Status: ⚠️ NEEDS TESTING
Test Steps:
# Test single database backup selection
sudo -u postgres ./dbbackup interactive
# Navigate to: Single Database Backup (option 1)
# Browse database list
# Select testdb_50gb
# Press Enter to start
# Observe progress
Success Criteria:
- Database list displays correctly
- Can scroll through databases
- Selection works with Enter
- Progress shows during backup
- Backup completes successfully
Phase 3: Edge Cases and Error Handling
3.1 Disk Space Exhaustion
Priority: MEDIUM
Status: ⚠️ NEEDS TESTING
Test Steps:
# Check current space
df -h /
# Test with limited space (if safe)
# Create large file to fill disk to 90%
# Attempt backup
# Verify error handling
Success Criteria:
- Clear error message about disk space
- Graceful failure (no corruption)
- Cleanup of partial files
3.2 Interrupted Operations
Priority: MEDIUM
Status: ⚠️ NEEDS TESTING
Test Steps:
# Start backup
sudo -u postgres ./dbbackup backup cluster &
PID=$!
# Wait 30 seconds
sleep 30
# Interrupt with Ctrl+C or kill
kill -INT $PID
# Check for cleanup
ls -la /var/lib/pgsql/db_backups/.cluster_*
Success Criteria:
- Graceful shutdown on SIGINT
- Temp directories cleaned up
- No corrupted files left
- Clear error message
3.3 Invalid Archive Files
Priority: LOW
Status: ⚠️ NEEDS TESTING
Test Steps:
# Test with non-existent file
sudo -u postgres ./dbbackup restore single /tmp/nonexistent.dump
# Test with corrupted archive
echo "corrupted" > /tmp/bad.dump
sudo -u postgres ./dbbackup restore single /tmp/bad.dump
# Test with wrong format
sudo -u postgres ./dbbackup restore cluster /tmp/single_db.dump
Success Criteria:
- Clear error messages
- No crashes
- Proper format detection
Phase 4: Performance and Scalability
4.1 Memory Usage Monitoring
Priority: HIGH
Status: ⚠️ NEEDS MONITORING
Test Steps:
# Monitor during large backup
(
while true; do
ps aux | grep dbbackup | grep -v grep
free -h
sleep 10
done
) > memory_usage.log &
MONITOR_PID=$!
# Run backup
sudo -u postgres ./dbbackup backup cluster
# Stop monitoring
kill $MONITOR_PID
# Review memory usage
grep -A 1 "dbbackup" memory_usage.log | grep -v grep
Success Criteria:
- Memory usage stays under 1.5GB
- No OOM errors
- Memory released after completion
4.2 Compression Performance
Priority: MEDIUM
Status: ⚠️ NEEDS TESTING
Test Different Compression Levels:
# Test compression levels 1, 3, 6, 9
for LEVEL in 1 3 6 9; do
echo "Testing compression level $LEVEL"
time sudo -u postgres ./dbbackup backup single testdb_50gb \
--compression=$LEVEL
done
# Compare sizes and times
ls -lh /var/lib/pgsql/db_backups/db_testdb_50gb_*.dump
Success Criteria:
- All compression levels work
- Higher compression = smaller file
- Higher compression = longer time
- Level 6 is good balance
Phase 5: Documentation Verification
5.1 README Examples
Priority: HIGH
Status: ⚠️ NEEDS VERIFICATION
Test All README Examples:
# Example 1: Single database backup
dbbackup backup single myapp_db
# Example 2: Sample backup
dbbackup backup sample myapp_db --sample-ratio 10
# Example 3: Full cluster backup
dbbackup backup cluster
# Example 4: With custom settings
dbbackup backup single myapp_db \
--host db.example.com \
--port 5432 \
--user backup_user \
--ssl-mode require
# Example 5: System commands
dbbackup status
dbbackup preflight
dbbackup list
dbbackup cpu
Success Criteria:
- All examples work as documented
- No syntax errors
- Output matches expectations
5.2 Authentication Examples
Priority: HIGH
Status: ⚠️ NEEDS VERIFICATION
Test All Auth Methods from README:
# Method 1: Peer auth
sudo -u postgres dbbackup status
# Method 2: ~/.pgpass
echo "localhost:5432:*:postgres:password" > ~/.pgpass
chmod 0600 ~/.pgpass
dbbackup status --user postgres
# Method 3: PGPASSWORD
export PGPASSWORD=password
dbbackup status --user postgres
# Method 4: --password flag
dbbackup status --user postgres --password password
Success Criteria:
- All methods work or fail with clear errors
- Documentation matches reality
Phase 6: Cross-Platform Testing
6.1 Binary Verification
Priority: LOW
Status: ⚠️ NOT TESTED
Test Binary Compatibility:
# List all binaries
ls -lh bin/
# Test each binary (if platform available)
# - dbbackup_linux_amd64
# - dbbackup_linux_arm64
# - dbbackup_darwin_amd64
# - dbbackup_darwin_arm64
# etc.
# At minimum, test current platform
./dbbackup --version
Success Criteria:
- Current platform binary works
- Binaries are not corrupted
- Reasonable file sizes
Test Execution Checklist
Pre-Flight
- Backup current databases before testing
- Document current system state
- Ensure sufficient disk space (>50GB free)
- Check no other backups running
- Clean temp directories
Critical Path Tests (Must Pass)
- Cluster Backup completes successfully
- Cluster Restore completes successfully
- Ownership preserved after cluster restore
- Large database backup/restore works
- TUI launches and navigates correctly
- TUI cluster backup works (fix Enter key issue)
- Authentication works with at least one method
High Priority Tests
- Privilege diagnostic tool runs successfully
- All README examples work
- Memory usage is acceptable
- Progress indicators work correctly
- Error messages are clear
Medium Priority Tests
- Compression levels work correctly
- Interrupted operations clean up properly
- Disk space errors handled gracefully
- Invalid archives detected properly
Low Priority Tests
- Cross-platform binaries verified
- All documentation examples tested
- Performance benchmarks recorded
Known Issues to Resolve
Issue #1: TUI Cluster Backup Enter Key
Reported: "on cluster backup restore selection - i cant press enter to select the cluster backup - interactiv"
Status: NOT FIXED
Priority: CRITICAL
Action: Debug TUI event handling for cluster restore selection
Issue #2: Large Database Plain Format Not Compressed
Discovered: Plain format dumps are 84GB+ uncompressed, causing slow tar compression
Status: IDENTIFIED
Priority: HIGH
Action: Fix external compression for plain format dumps (pipe through pigz properly)
Issue #3: Privilege Display Shows NULL
Reported: "If i list Databases on Host - i see Access Privilleges are not set"
Status: INVESTIGATING
Priority: MEDIUM
Action: Run privilege_diagnostic.sh on production host and compare
Success Criteria Summary
Production Ready Checklist
- ✅ All Critical Path tests pass
- ✅ No data loss in any scenario
- ✅ Ownership preserved correctly
- ✅ Memory usage <2GB for any operation
- ✅ Clear error messages for all failures
- ✅ TUI fully functional
- ✅ README examples all work
- ✅ Large database support verified (7.5GB+)
- ✅ Authentication methods work
- ✅ Backup/restore cycle completes successfully
Performance Targets
- Single DB Backup (7.5GB): <10 minutes
- Single DB Restore (7.5GB): <25 minutes
- Cluster Backup (16 DBs): <15 minutes
- Cluster Restore (16 DBs): <35 minutes
- Memory Usage: <1.5GB peak
- Compression Ratio: >90% for test data
Test Execution Timeline
Estimated Time: 4-6 hours for complete testing
-
Phase 1: Command-Line Testing (2-3 hours)
- Cluster backup/restore cycle
- Ownership verification
- Large database operations
-
Phase 2: Interactive Mode (1-2 hours)
- TUI navigation
- Cluster backup via TUI (fix Enter key)
- Cluster restore via TUI
-
Phase 3-4: Edge Cases & Performance (1 hour)
- Error handling
- Memory monitoring
- Compression testing
-
Phase 5-6: Documentation & Cross-Platform (30 minutes)
- Verify examples
- Test binaries
Next Immediate Actions
-
CRITICAL: Complete cluster backup successfully
- Clean environment
- Execute with default compression (6)
- Verify completion
-
CRITICAL: Test cluster restore with ownership
- Document pre-restore state
- Execute restore
- Verify ownership preserved
-
CRITICAL: Fix TUI Enter key issue
- Debug cluster restore selection
- Test fix thoroughly
-
HIGH: Run privilege diagnostic on both hosts
- Execute on test host
- Execute on production host
- Compare results
-
HIGH: Complete TUI testing
- All menu items
- All operations
- Error scenarios
Test Results Log
To be filled during execution:
Date: ___________
Tester: ___________
Phase 1.1 - Cluster Backup: PASS / FAIL
Time: _______ File Size: _______ Notes: _______
Phase 1.2 - Cluster Restore: PASS / FAIL
Time: _______ Ownership OK: YES / NO Notes: _______
Phase 1.3 - Large DB Restore: PASS / FAIL
Time: _______ Size Match: YES / NO Notes: _______
[Continue for all phases...]
Document Status: Draft - Ready for Execution
Last Updated: November 11, 2025
Next Review: After test execution completion