143 lines
4.7 KiB
Bash
143 lines
4.7 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# Docker persistence test script for Queue North Website
|
||
|
|
# Verifies SQLite database survives container restart with volume mount
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
echo "=== Docker Persistence Test for Queue North Website ==="
|
||
|
|
|
||
|
|
# Stop any existing container
|
||
|
|
docker stop queuenorth-test 2>/dev/null || true
|
||
|
|
docker rm queuenorth-test 2>/dev/null || true
|
||
|
|
|
||
|
|
# Remove any existing volumes for fresh start
|
||
|
|
docker volume rm queuenorth-test-db 2>/dev/null || true
|
||
|
|
docker volume rm queuenorth-test-logs 2>/dev/null || true
|
||
|
|
|
||
|
|
# Build fresh image
|
||
|
|
echo "Building fresh Docker image..."
|
||
|
|
docker build -t queuenorth-test .
|
||
|
|
|
||
|
|
# Create volumes for persistence
|
||
|
|
docker volume create queuenorth-test-db > /dev/null
|
||
|
|
docker volume create queuenorth-test-logs > /dev/null
|
||
|
|
|
||
|
|
# Run container with volume mount
|
||
|
|
echo "Starting container with persistent volume..."
|
||
|
|
docker run -d \
|
||
|
|
--name queuenorth-test \
|
||
|
|
-p 3002:3001 \
|
||
|
|
-v queuenorth-test-db:/app/db \
|
||
|
|
-v queuenorth-test-logs:/app/logs \
|
||
|
|
-e NODE_ENV=production \
|
||
|
|
-e SERVER_PORT=3001 \
|
||
|
|
queuenorth-test
|
||
|
|
|
||
|
|
# Wait for server to be ready
|
||
|
|
echo "Waiting for server to be ready..."
|
||
|
|
sleep 5
|
||
|
|
|
||
|
|
# Verify health endpoint
|
||
|
|
if curl -s http://localhost:3002/api/health | grep -q '"status":"ok"'; then
|
||
|
|
echo "✓ Health check passed"
|
||
|
|
else
|
||
|
|
echo "✗ Health check failed"
|
||
|
|
docker logs queuenorth-test
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Insert test data via API
|
||
|
|
echo "Inserting test lead data..."
|
||
|
|
curl -s -X POST http://localhost:3002/api/leads \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{"company":"Docker Test Co","name":"Docker Test User","email":"docker@test.com","phone":"555-DOCKER","zip":"54321","message":"Docker persistence test","service_interest":"contact-center"}' > /dev/null
|
||
|
|
|
||
|
|
echo "Inserting test support request data..."
|
||
|
|
curl -s -X POST http://localhost:3002/api/support \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{"name":"Docker Test User","company":"Docker Test Co","email":"docker@test.com","phone":"555-DOCKER","issue":"Docker persistence test support request","priority":"medium"}' > /dev/null
|
||
|
|
|
||
|
|
# Verify data was inserted using Node.js (sqlite3 CLI not available in container)
|
||
|
|
echo "Verifying data in database..."
|
||
|
|
|
||
|
|
# Check leads table
|
||
|
|
if docker exec queuenorth-test node -e "
|
||
|
|
const sqlite3 = require('better-sqlite3');
|
||
|
|
const db = new sqlite3('/app/db/queuenorth.db');
|
||
|
|
const row = db.prepare('SELECT COUNT(*) as c FROM leads WHERE email=?').get('docker@test.com');
|
||
|
|
console.log(row.c);
|
||
|
|
process.exit(row.c === 1 ? 0 : 1);
|
||
|
|
" 2>/dev/null; then
|
||
|
|
echo "✓ Test lead data persisted in database"
|
||
|
|
else
|
||
|
|
echo "✗ Test lead data NOT persisted in database"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check support_requests table
|
||
|
|
if docker exec queuenorth-test node -e "
|
||
|
|
const sqlite3 = require('better-sqlite3');
|
||
|
|
const db = new sqlite3('/app/db/queuenorth.db');
|
||
|
|
const row = db.prepare('SELECT COUNT(*) as c FROM support_requests WHERE email=?').get('docker@test.com');
|
||
|
|
console.log(row.c);
|
||
|
|
process.exit(row.c === 1 ? 0 : 1);
|
||
|
|
" 2>/dev/null; then
|
||
|
|
echo "✓ Test support request data persisted in database"
|
||
|
|
else
|
||
|
|
echo "✗ Test support request data NOT persisted in database"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Stop the container (simulates restart)
|
||
|
|
echo "Stopping container to simulate restart..."
|
||
|
|
docker stop queuenorth-test > /dev/null
|
||
|
|
sleep 2
|
||
|
|
|
||
|
|
# Restart with same volume mount
|
||
|
|
echo "Restarting container with same volume..."
|
||
|
|
docker start queuenorth-test > /dev/null
|
||
|
|
sleep 3
|
||
|
|
|
||
|
|
# Verify data is still there after restart
|
||
|
|
echo "Verifying data persists after restart..."
|
||
|
|
|
||
|
|
# Check leads after restart
|
||
|
|
if docker exec queuenorth-test node -e "
|
||
|
|
const sqlite3 = require('better-sqlite3');
|
||
|
|
const db = new sqlite3('/app/db/queuenorth.db');
|
||
|
|
const row = db.prepare('SELECT COUNT(*) as c FROM leads WHERE email=?').get('docker@test.com');
|
||
|
|
console.log(row.c);
|
||
|
|
process.exit(row.c === 1 ? 0 : 1);
|
||
|
|
" 2>/dev/null; then
|
||
|
|
echo "✓ Data persists after container restart"
|
||
|
|
else
|
||
|
|
echo "✗ Data NOT persisted after container restart"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check support_requests after restart
|
||
|
|
if docker exec queuenorth-test node -e "
|
||
|
|
const sqlite3 = require('better-sqlite3');
|
||
|
|
const db = new sqlite3('/app/db/queuenorth.db');
|
||
|
|
const row = db.prepare('SELECT COUNT(*) as c FROM support_requests WHERE email=?').get('docker@test.com');
|
||
|
|
console.log(row.c);
|
||
|
|
process.exit(row.c === 1 ? 0 : 1);
|
||
|
|
" 2>/dev/null; then
|
||
|
|
echo "✓ Support requests data persists after container restart"
|
||
|
|
else
|
||
|
|
echo "✗ Support requests data NOT persisted after container restart"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Cleanup
|
||
|
|
echo "Cleaning up..."
|
||
|
|
docker stop queuenorth-test > /dev/null
|
||
|
|
docker rm queuenorth-test > /dev/null
|
||
|
|
docker volume rm queuenorth-test-db > /dev/null
|
||
|
|
docker volume rm queuenorth-test-logs > /dev/null
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=== All Docker persistence tests passed! ==="
|
||
|
|
echo "SQLite database correctly persists across container restarts with volume mount."
|