313 lines
7.2 KiB
Markdown
313 lines
7.2 KiB
Markdown
# GitLab Testing Procedures
|
|
|
|
## Pre-Deployment Tests (Local Environment)
|
|
|
|
Run these tests before deploying to production.
|
|
|
|
### 1. DNS Resolution Test
|
|
```bash
|
|
# Test A record
|
|
dig gitlab.yourdomain.com
|
|
|
|
# Should return your droplet IP
|
|
# Alternative using nslookup
|
|
nslookup gitlab.yourdomain.com
|
|
```
|
|
|
|
**Expected Result:** Your droplet IP address should be returned.
|
|
|
|
### 2. SSH Access Test
|
|
```bash
|
|
# Test SSH connection with verbose output
|
|
ssh -v root@your_droplet_ip
|
|
|
|
# Should connect without errors
|
|
```
|
|
|
|
**Expected Result:** Successful SSH connection to droplet.
|
|
|
|
### 3. Port Accessibility Test
|
|
```bash
|
|
# Test required ports
|
|
nc -zv your_droplet_ip 22 # SSH
|
|
nc -zv your_droplet_ip 80 # HTTP
|
|
nc -zv your_droplet_ip 443 # HTTPS
|
|
|
|
# All should show "succeeded"
|
|
```
|
|
|
|
**Expected Result:** All three ports should be accessible.
|
|
|
|
## Post-Deployment Tests
|
|
|
|
Run these tests after each deployment step.
|
|
|
|
### 1. Service Status Check
|
|
```bash
|
|
ssh root@your_droplet_ip 'gitlab-ctl status'
|
|
```
|
|
|
|
**Expected Result:** All services should be "run" status.
|
|
|
|
### 2. HTTPS/SSL Test
|
|
```bash
|
|
# Test HTTPS response
|
|
curl -I https://gitlab.yourdomain.com
|
|
|
|
# Should return 200 OK with HTTPS headers
|
|
|
|
# Test SSL certificate
|
|
openssl s_client -connect gitlab.yourdomain.com:443 -servername gitlab.yourdomain.com
|
|
|
|
# Should show valid certificate from Let's Encrypt
|
|
```
|
|
|
|
**Expected Result:**
|
|
- HTTP 200 OK response
|
|
- Valid Let's Encrypt certificate
|
|
- No SSL warnings
|
|
|
|
### 3. Web Interface Test
|
|
|
|
**Manual Steps:**
|
|
1. Visit `https://gitlab.yourdomain.com` in browser
|
|
2. Verify no certificate warnings
|
|
3. Should see GitLab login page
|
|
4. Get root password: `ssh root@your_droplet_ip 'cat /etc/gitlab/initial_root_password'`
|
|
5. Login with username `root` and the password
|
|
6. Should successfully reach GitLab dashboard
|
|
|
|
**Expected Result:** Successful login and functional UI.
|
|
|
|
### 4. Git Operations Test (HTTPS)
|
|
```bash
|
|
# Create a test repository via web UI first
|
|
# Then test clone:
|
|
git clone https://gitlab.yourdomain.com/root/test-repo.git
|
|
cd test-repo
|
|
|
|
# Create test file
|
|
echo "# Test Repository" > README.md
|
|
|
|
# Commit and push
|
|
git add README.md
|
|
git commit -m "Initial commit"
|
|
git push origin main
|
|
```
|
|
|
|
**Expected Result:** Successful clone, commit, and push operations.
|
|
|
|
### 5. SSH Git Access Test
|
|
```bash
|
|
# First, add your SSH key in GitLab UI:
|
|
# User Settings → SSH Keys → Add new key
|
|
|
|
# Test SSH connection
|
|
ssh -T git@gitlab.yourdomain.com
|
|
# Should return: Welcome to GitLab, @username!
|
|
|
|
# Clone via SSH
|
|
git clone git@gitlab.yourdomain.com:root/test-repo.git test-repo-ssh
|
|
cd test-repo-ssh
|
|
|
|
# Make changes
|
|
echo "SSH test" >> README.md
|
|
git add README.md
|
|
git commit -m "SSH test commit"
|
|
git push origin main
|
|
```
|
|
|
|
**Expected Result:** Successful SSH authentication and git operations.
|
|
|
|
### 6. Email Delivery Test
|
|
|
|
Run the comprehensive email test script:
|
|
```bash
|
|
./scripts/test_email.sh
|
|
```
|
|
|
|
**Manual Email Test:**
|
|
```bash
|
|
ssh root@your_droplet_ip
|
|
gitlab-rails console
|
|
|
|
# Send test email
|
|
Notify.test_email('your@email.com', 'GitLab Test', 'This is a test').deliver_now
|
|
exit
|
|
|
|
# Check logs
|
|
tail -f /var/log/gitlab/gitlab-rails/production.log | grep -i mail
|
|
```
|
|
|
|
**Expected Result:**
|
|
- Test email received within 5 minutes
|
|
- Email NOT in spam folder
|
|
- Email has correct from address
|
|
- All DNS records verified (SPF, DKIM, DMARC)
|
|
|
|
### 7. Backup Test
|
|
```bash
|
|
# Run backup script
|
|
ssh root@your_droplet_ip '/root/gitlab-deployment/scripts/backup_gitlab.sh'
|
|
|
|
# Verify backup file created
|
|
ssh root@your_droplet_ip 'ls -lh /var/opt/gitlab/backups/'
|
|
|
|
# Should show recent .tar file
|
|
```
|
|
|
|
**Expected Result:**
|
|
- Backup completes without errors
|
|
- Backup file exists in /var/opt/gitlab/backups/
|
|
- Backup file size is reasonable (not empty)
|
|
|
|
### 8. Health Check Test
|
|
```bash
|
|
# Run health check script
|
|
ssh root@your_droplet_ip '/root/gitlab-deployment/scripts/health_check.sh'
|
|
```
|
|
|
|
**Expected Result:**
|
|
- All services running
|
|
- Adequate disk space (>20% free)
|
|
- Reasonable memory usage (<80%)
|
|
- Health endpoint returns success
|
|
- Valid SSL certificate
|
|
|
|
## Integration Tests
|
|
|
|
### GitLab Rake Checks
|
|
```bash
|
|
ssh root@your_droplet_ip 'sudo gitlab-rake gitlab:check'
|
|
```
|
|
|
|
**Expected Result:** All checks should pass or show warnings only (no failures).
|
|
|
|
### GitLab Environment Info
|
|
```bash
|
|
ssh root@your_droplet_ip 'sudo gitlab-rake gitlab:env:info'
|
|
```
|
|
|
|
Review output for correct configuration.
|
|
|
|
### Database Connectivity
|
|
```bash
|
|
ssh root@your_droplet_ip 'sudo gitlab-rake gitlab:db:check'
|
|
```
|
|
|
|
**Expected Result:** Database connection successful.
|
|
|
|
## Monitoring Checklist
|
|
|
|
Create this checklist for regular monitoring:
|
|
|
|
- [ ] GitLab web UI accessible and responsive
|
|
- [ ] SSL certificate valid and auto-renewing
|
|
- [ ] Git clone/push operations work via HTTPS
|
|
- [ ] Git clone/push operations work via SSH
|
|
- [ ] Email delivery working (test weekly)
|
|
- [ ] Emails not going to spam
|
|
- [ ] Backups completing successfully (check logs)
|
|
- [ ] All GitLab services running
|
|
- [ ] Disk space adequate (>20% free)
|
|
- [ ] Memory usage reasonable (<80%)
|
|
- [ ] No errors in logs
|
|
- [ ] SSL certificate expiry > 30 days
|
|
- [ ] DNS records still valid
|
|
|
|
## Automated Testing Script
|
|
|
|
Create `tests/integration_tests.sh`:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# Run all integration tests
|
|
|
|
source .env
|
|
|
|
echo "=== GitLab Integration Tests ==="
|
|
|
|
FAILED=0
|
|
|
|
# Test 1: HTTP Response
|
|
echo -n "Testing HTTP response... "
|
|
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://${GITLAB_DOMAIN})
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
echo "✓ PASS"
|
|
else
|
|
echo "✗ FAIL (HTTP $HTTP_CODE)"
|
|
FAILED=$((FAILED + 1))
|
|
fi
|
|
|
|
# Test 2: SSL Certificate
|
|
echo -n "Testing SSL certificate... "
|
|
if echo | openssl s_client -servername ${GITLAB_DOMAIN} -connect ${GITLAB_DOMAIN}:443 2>/dev/null | grep -q "Verify return code: 0"; then
|
|
echo "✓ PASS"
|
|
else
|
|
echo "✗ FAIL"
|
|
FAILED=$((FAILED + 1))
|
|
fi
|
|
|
|
# Test 3: Services Running
|
|
echo -n "Testing GitLab services... "
|
|
if ssh root@${DROPLET_IP} 'gitlab-ctl status' | grep -q "run:"; then
|
|
echo "✓ PASS"
|
|
else
|
|
echo "✗ FAIL"
|
|
FAILED=$((FAILED + 1))
|
|
fi
|
|
|
|
# Test 4: Disk Space
|
|
echo -n "Testing disk space... "
|
|
DISK_USAGE=$(ssh root@${DROPLET_IP} "df -h / | tail -1 | awk '{print \$5}' | sed 's/%//'")
|
|
if [ "$DISK_USAGE" -lt 80 ]; then
|
|
echo "✓ PASS (${DISK_USAGE}% used)"
|
|
else
|
|
echo "✗ FAIL (${DISK_USAGE}% used - critically high)"
|
|
FAILED=$((FAILED + 1))
|
|
fi
|
|
|
|
# Test 5: Email DNS Records
|
|
echo -n "Testing email DNS records... "
|
|
DOMAIN=$(echo $GITLAB_EMAIL_FROM | cut -d'@' -f2)
|
|
if dig +short TXT ${DOMAIN} | grep -q "spf"; then
|
|
echo "✓ PASS"
|
|
else
|
|
echo "⚠ WARNING (SPF not found)"
|
|
fi
|
|
|
|
# Summary
|
|
echo ""
|
|
echo "=== Test Summary ==="
|
|
if [ $FAILED -eq 0 ]; then
|
|
echo "✓ All tests passed"
|
|
exit 0
|
|
else
|
|
echo "✗ $FAILED test(s) failed"
|
|
exit 1
|
|
fi
|
|
```
|
|
|
|
Make executable: `chmod +x tests/integration_tests.sh`
|
|
|
|
## Production Readiness Checklist
|
|
|
|
Before declaring production ready:
|
|
|
|
- [ ] All pre-deployment tests pass
|
|
- [ ] All post-deployment tests pass
|
|
- [ ] Integration tests pass
|
|
- [ ] Email delivery works (not in spam)
|
|
- [ ] Backup and restore tested successfully
|
|
- [ ] Load testing completed satisfactorily
|
|
- [ ] Disaster recovery procedure tested
|
|
- [ ] Monitoring and alerting configured
|
|
- [ ] Documentation reviewed and updated
|
|
- [ ] Credentials rotated and secured
|
|
- [ ] Team trained on GitLab usage
|
|
- [ ] Support plan in place
|
|
|
|
## Troubleshooting Tests
|
|
|
|
If any test fails, see TROUBLESHOOTING.md for solutions.
|