# Testing Procedures *Testing guidelines for the homelab infrastructure* --- ## Overview This document outlines testing procedures for deploying new services, making infrastructure changes, and validating functionality. --- ## Pre-Deployment Testing ### New Service Checklist - [ ] Review Docker image (official, stars, updates) - [ ] Check for security vulnerabilities - [ ] Verify resource requirements - [ ] Test locally first - [ ] Verify compose syntax - [ ] Check port availability - [ ] Test volume paths ### Compose Validation ```bash # Validate syntax docker-compose config --quiet # Check for errors docker-compose up --dry-run # Pull images docker-compose pull ``` --- ## Local Testing ### Docker Desktop / Mini Setup 1. Create test compose file 2. Run on local machine 3. Verify all features work 4. Document any issues ### Test Environment If available, use staging: - Staging host: `seattle` VM - Test domain: `*.test.vish.local` - Shared internally only --- ## Integration Testing ### Authentik SSO ```bash # Test login flow 1. Open service 2. Click "Login with Authentik" 3. Verify redirect to Authentik 4. Enter credentials 5. Verify return to service 6. Check user profile ``` ### Nginx Proxy Manager ```bash # Test proxy host curl -H "Host: service.vish.local" http://localhost # Test SSL curl -k https://service.vish.gg # Check headers curl -I https://service.vish.gg ``` ### Database Connections ```bash # PostgreSQL docker exec psql -U user -c "SELECT 1" # Test from application docker exec nc -zv db 5432 ``` --- ## Monitoring Validation ### Prometheus Targets 1. Open Prometheus UI 2. Go to Status → Targets 3. Verify all targets are UP 4. Check for scrape errors ### Alert Testing ```bash # Trigger test alert curl -X POST http://alertmanager:9093/api/v1/alerts \ -H "Content-Type: application/json" \ -d '[{ "labels": { "alertname": "TestAlert", "severity": "critical" }, "annotations": { "summary": "Test alert" } }]' ``` ### Grafana Dashboards - [ ] All panels load - [ ] Data populates - [ ] No errors in console - [ ] Alerts configured --- ## Backup Testing ### Full Backup Test ```bash # Run backup ansible-playbook ansible/automation/playbooks/backup_configs.yml ansible-playbook ansible/automation/playbooks/backup_databases.yml # Verify backup files exist ls -la /backup/ # Test restore to test environment # (do NOT overwrite production!) ``` ### Restore Procedure Test 1. Stop service 2. Restore data from backup 3. Start service 4. Verify functionality 5. Check logs for errors --- ## Performance Testing ### Load Testing ```bash # Using hey or ab hey -n 1000 -c 10 https://service.vish.gg # Check response times curl -w "@curl-format.txt" -o /dev/null -s https://service.vish.gg # curl-format.txt: # time_namelookup: %{time_namelookup}\n # time_connect: %{time_connect}\n # time_appconnect: %{time_appconnect}\n # time_redirect: %{time_redirect}\n # time_pretransfer: %{time_pretransfer}\n # time_starttransfer: %{time_starttransfer}\n # time_total: %{time_total}\n ``` ### Resource Testing ```bash # Monitor during load docker stats --no-stream # Check for OOM kills dmesg | grep -i "out of memory" # Monitor disk I/O iostat -x 1 ``` --- ## Security Testing ### Vulnerability Scanning ```bash # Trivy scan trivy image --severity HIGH,CRITICAL # Check for secrets trivy fs --security-checks secrets /path/to/compose # Docker scan docker scan ``` ### SSL/TLS Testing ```bash # SSL Labs # Visit: https://www.ssllabs.com/ssltest/ # CLI check openssl s_client -connect service.vish.gg:443 # Check certificates certinfo service.vish.gg ``` --- ## Network Testing ### Connectivity ```bash # Port scan nmap -p 1-1000 192.168.0.x # DNS check dig service.vish.local nslookup service.vish.local # traceroute traceroute service.vish.gg ``` ### Firewall Testing ```bash # Check open ports ss -tulpn # Test from outside # Use online port scanner # Test blocked access curl -I http://internal-service:port # Should fail without VPN ``` --- ## Regression Testing ### After Updates 1. Check service starts 2. Verify all features 3. Test SSO if enabled 4. Check monitoring 5. Verify backups ### Critical Path Tests | Path | Steps | |------|-------| | External access | VPN → NPM → Service | | SSO login | Service → Auth → Dashboard | | Media playback | Request → Download → Play | | Backup restore | Stop → Restore → Verify → Start | --- ## Acceptance Criteria ### New Service - [ ] Starts without errors - [ ] UI accessible - [ ] Basic function works - [ ] SSO configured (if supported) - [ ] Monitoring enabled - [ ] Backup configured - [ ] Documentation created ### Infrastructure Change - [ ] All services running - [ ] No new alerts - [ ] Monitoring healthy - [ ] Backups completed - [ ] Users notified (if needed) --- ## Links - [Monitoring Architecture](../infrastructure/MONITORING_ARCHITECTURE.md) - [Backup Procedures](../BACKUP_PROCEDURES.md) - [Disaster Recovery](../troubleshooting/disaster-recovery.md)