[#4] 增加端到端测试
This commit is contained in:
115
src/bind/tests/scripts/04_persistence_test.sh
Executable file
115
src/bind/tests/scripts/04_persistence_test.sh
Executable file
@@ -0,0 +1,115 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Test configuration persistence after container restart
|
||||
# Usage: ./04_persistence_test.sh
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
TEST_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
|
||||
echo "=== Configuration Persistence Test ==="
|
||||
|
||||
# Check if dig is available
|
||||
if ! command -v dig &> /dev/null; then
|
||||
echo "Installing dig (dnsutils)..."
|
||||
apt-get update && apt-get install -y dnsutils
|
||||
fi
|
||||
|
||||
# Function to test DNS query
|
||||
test_dns_query() {
|
||||
local hostname="$1"
|
||||
local expected_ip="$2"
|
||||
local description="$3"
|
||||
|
||||
echo "Testing: $description"
|
||||
echo "Query: $hostname.argus.com -> Expected: $expected_ip"
|
||||
|
||||
result=$(dig @localhost $hostname.argus.com A +short 2>/dev/null || echo "QUERY_FAILED")
|
||||
|
||||
if [ "$result" = "$expected_ip" ]; then
|
||||
echo "✓ $result"
|
||||
return 0
|
||||
else
|
||||
echo "✗ Got: $result, Expected: $expected_ip"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo "Step 1: Stopping current container..."
|
||||
|
||||
# Stop the container
|
||||
docker compose down
|
||||
|
||||
echo "Container stopped"
|
||||
|
||||
echo ""
|
||||
echo "Step 2: Verifying persistent configuration exists..."
|
||||
|
||||
# Check if modified configuration exists
|
||||
DB_FILE="$TEST_DIR/private/argus/bind/db.argus.com"
|
||||
|
||||
if [ ! -f "$DB_FILE" ]; then
|
||||
echo "✗ Persistent configuration file not found: $DB_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if the modified IP is in the configuration
|
||||
if grep -q "192.168.1.100" "$DB_FILE"; then
|
||||
echo "✓ Modified IP (192.168.1.100) found in persistent configuration"
|
||||
else
|
||||
echo "✗ Modified IP not found in persistent configuration"
|
||||
echo "Configuration content:"
|
||||
cat "$DB_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Step 3: Restarting container with persistent configuration..."
|
||||
|
||||
# Start the container again
|
||||
docker compose up -d
|
||||
|
||||
echo "Waiting for container to be ready..."
|
||||
sleep 5
|
||||
|
||||
# Check if container is running
|
||||
if ! docker compose ps | grep -q "Up"; then
|
||||
echo "✗ Failed to restart container"
|
||||
docker compose logs
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✓ Container restarted successfully"
|
||||
|
||||
echo ""
|
||||
echo "Step 4: Testing DNS resolution after restart..."
|
||||
|
||||
# Wait a bit more for DNS to be fully ready
|
||||
sleep 5
|
||||
|
||||
# Test that the modified configuration is still active
|
||||
if ! test_dns_query "web" "192.168.1.100" "Persistent web.argus.com resolution"; then
|
||||
echo "✗ Persistent configuration test failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Also verify ns1 still works
|
||||
if ! test_dns_query "ns1" "127.0.0.1" "ns1.argus.com still working"; then
|
||||
echo "✗ ns1 DNS test failed after restart"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Step 5: Verifying configuration files are linked correctly..."
|
||||
|
||||
# Check that the persistent files are properly linked
|
||||
echo "Checking file links in container:"
|
||||
docker compose exec bind9 ls -la /etc/bind/named.conf.local /etc/bind/db.argus.com
|
||||
|
||||
echo ""
|
||||
echo "✓ Configuration persistence test completed successfully!"
|
||||
echo "✓ Modified IP (192.168.1.100) persisted after container restart"
|
||||
echo "✓ Configuration files properly linked to persistent storage"
|
||||
echo "✓ DNS resolution working correctly with persisted configuration"
|
||||
Reference in New Issue
Block a user