feat: v2.0.0 production-ready release with Redis, OPcache and Nginx optimizations
This commit is contained in:
269
tests/final-test.sh
Executable file
269
tests/final-test.sh
Executable file
@@ -0,0 +1,269 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Comprehensive test script for LEMP WordPress deployment
|
||||
# Tests both Docker and VM/Bare Metal environments
|
||||
#
|
||||
# Usage: ./final-test.sh [docker|vm|all]
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
DOCKER_INVENTORY="inventory/docker.ini"
|
||||
VM_INVENTORY="inventory/production.yml"
|
||||
PLAYBOOK="playbooks/lemp-wordpress.yml"
|
||||
TEST_TIMEOUT=300
|
||||
|
||||
# Functions
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
check_prerequisites() {
|
||||
log_info "Checking prerequisites..."
|
||||
|
||||
# Check if ansible is installed
|
||||
if ! command -v ansible-playbook &> /dev/null; then
|
||||
log_error "ansible-playbook is not installed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if required files exist
|
||||
local required_files=("$PLAYBOOK" "$DOCKER_INVENTORY" "vars/debian-family.yml")
|
||||
for file in "${required_files[@]}"; do
|
||||
if [[ ! -f "$file" ]]; then
|
||||
log_error "Required file not found: $file"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
log_success "Prerequisites check passed"
|
||||
}
|
||||
|
||||
test_syntax() {
|
||||
log_info "Testing playbook syntax..."
|
||||
|
||||
if ansible-playbook "$PLAYBOOK" --syntax-check > /dev/null 2>&1; then
|
||||
log_success "Playbook syntax is valid"
|
||||
else
|
||||
log_error "Playbook syntax check failed"
|
||||
ansible-playbook "$PLAYBOOK" --syntax-check
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
test_docker_environment() {
|
||||
log_info "Testing Docker environment..."
|
||||
|
||||
# Check if Docker is available
|
||||
if ! command -v docker &> /dev/null; then
|
||||
log_warning "Docker not available, skipping Docker tests"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Start Docker environment
|
||||
log_info "Starting Docker test environment..."
|
||||
cd docker
|
||||
if docker-compose up -d --build; then
|
||||
log_success "Docker environment started"
|
||||
else
|
||||
log_error "Failed to start Docker environment"
|
||||
cd ..
|
||||
return 1
|
||||
fi
|
||||
cd ..
|
||||
|
||||
# Wait for SSH to be ready
|
||||
log_info "Waiting for SSH to be ready..."
|
||||
sleep 10
|
||||
|
||||
# Test SSH connectivity
|
||||
if ansible all -i "$DOCKER_INVENTORY" -m ping --timeout=30; then
|
||||
log_success "SSH connectivity to Docker container verified"
|
||||
else
|
||||
log_error "Cannot connect to Docker container via SSH"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Run playbook
|
||||
log_info "Running LEMP WordPress playbook in Docker..."
|
||||
if timeout "$TEST_TIMEOUT" ansible-playbook -i "$DOCKER_INVENTORY" "$PLAYBOOK"; then
|
||||
log_success "Docker deployment completed successfully"
|
||||
else
|
||||
log_error "Docker deployment failed"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Test WordPress installation
|
||||
log_info "Testing WordPress installation in Docker..."
|
||||
sleep 5
|
||||
|
||||
# Test HTTP response
|
||||
if curl -f -s http://localhost:8080 > /dev/null; then
|
||||
log_success "WordPress is responding on http://localhost:8080"
|
||||
else
|
||||
log_error "WordPress is not responding on http://localhost:8080"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Test WordPress content
|
||||
if curl -s http://localhost:8080 | grep -i "wordpress" > /dev/null; then
|
||||
log_success "WordPress content detected"
|
||||
else
|
||||
log_warning "WordPress content not detected (might be redirect)"
|
||||
fi
|
||||
|
||||
# Test admin area
|
||||
if curl -f -s http://localhost:8080/wp-admin/ > /dev/null; then
|
||||
log_success "WordPress admin area accessible"
|
||||
else
|
||||
log_warning "WordPress admin area not accessible (normal for fresh install)"
|
||||
fi
|
||||
|
||||
# Cleanup Docker environment
|
||||
log_info "Cleaning up Docker environment..."
|
||||
cd docker
|
||||
docker-compose down -v
|
||||
cd ..
|
||||
|
||||
log_success "Docker environment test completed successfully"
|
||||
return 0
|
||||
}
|
||||
|
||||
test_vm_environment() {
|
||||
log_info "Testing VM environment configuration..."
|
||||
|
||||
# Check if VM inventory exists
|
||||
if [[ ! -f "$VM_INVENTORY" ]]; then
|
||||
log_warning "VM inventory file not found: $VM_INVENTORY"
|
||||
log_warning "Skipping VM tests - create inventory file for VM testing"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Test inventory file syntax
|
||||
if ansible-inventory -i "$VM_INVENTORY" --list > /dev/null 2>&1; then
|
||||
log_success "VM inventory syntax is valid"
|
||||
else
|
||||
log_error "VM inventory syntax check failed"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Test VM connectivity (without actually running playbook)
|
||||
log_info "Testing VM connectivity..."
|
||||
if ansible all -i "$VM_INVENTORY" -m ping --timeout=10; then
|
||||
log_success "VM connectivity verified"
|
||||
|
||||
# Optional: Run actual deployment if user confirms
|
||||
read -p "Run full deployment on VM? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
log_info "Running LEMP WordPress playbook on VM..."
|
||||
if ansible-playbook -i "$VM_INVENTORY" "$PLAYBOOK" --ask-become-pass; then
|
||||
log_success "VM deployment completed successfully"
|
||||
|
||||
# Extract VM IP for testing
|
||||
VM_IP=$(ansible-inventory -i "$VM_INVENTORY" --list | jq -r '.webservers.hosts[0]')
|
||||
if [[ "$VM_IP" != "null" && "$VM_IP" != "" ]]; then
|
||||
log_info "Testing WordPress installation on VM ($VM_IP)..."
|
||||
if curl -f -s "http://$VM_IP" > /dev/null; then
|
||||
log_success "WordPress is responding on http://$VM_IP"
|
||||
else
|
||||
log_warning "WordPress not responding (might need time to start)"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log_error "VM deployment failed"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
log_info "Skipping VM deployment (connectivity test passed)"
|
||||
fi
|
||||
else
|
||||
log_warning "VM not reachable - check inventory configuration"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_success "VM environment test completed"
|
||||
return 0
|
||||
}
|
||||
|
||||
show_environment_info() {
|
||||
log_info "Environment Detection Test"
|
||||
echo
|
||||
echo "This test verifies the automatic environment detection logic:"
|
||||
echo "1. Docker environment: Detects /.dockerenv file"
|
||||
echo "2. VM/Bare Metal: All other systems"
|
||||
echo
|
||||
echo "The playbook will automatically:"
|
||||
echo "- Set wp_site_url to http://localhost:8080 in Docker"
|
||||
echo "- Set wp_site_url to http://server-ip in VM/Bare Metal"
|
||||
echo "- Allow manual override of both environment and URL"
|
||||
echo
|
||||
}
|
||||
|
||||
run_tests() {
|
||||
local test_type="${1:-all}"
|
||||
|
||||
show_environment_info
|
||||
check_prerequisites
|
||||
test_syntax
|
||||
|
||||
case "$test_type" in
|
||||
"docker")
|
||||
test_docker_environment
|
||||
;;
|
||||
"vm")
|
||||
test_vm_environment
|
||||
;;
|
||||
"all")
|
||||
test_docker_environment
|
||||
echo
|
||||
test_vm_environment
|
||||
;;
|
||||
*)
|
||||
log_error "Invalid test type: $test_type"
|
||||
echo "Usage: $0 [docker|vm|all]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
echo "========================================"
|
||||
echo " LEMP WordPress Deployment Test Suite"
|
||||
echo "========================================"
|
||||
echo
|
||||
|
||||
run_tests "$1"
|
||||
|
||||
echo
|
||||
log_success "Test suite completed!"
|
||||
echo
|
||||
echo "Next steps:"
|
||||
echo "1. Deploy to production server with: ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress.yml"
|
||||
echo "2. Customize variables in inventory files"
|
||||
echo "3. Enable SSL with: -e 'enable_ssl=true'"
|
||||
echo "4. Check documentation: docs/multi-environment-deployment.md"
|
||||
}
|
||||
|
||||
# Run main function with all arguments
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user