Files
next.orly.dev/scripts/test-docker.sh

251 lines
6.6 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
echo "=== ORLY Dgraph Docker Integration Test Suite ==="
echo ""
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Function to print colored output
print_error() {
echo -e "${RED}$1${NC}"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_info() {
echo -e "${YELLOW} $1${NC}"
}
# Check if docker is available
if ! command -v docker &> /dev/null; then
print_error "Docker is not installed or not in PATH"
exit 1
fi
# Check if docker-compose is available
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
print_error "Docker Compose is not installed or not in PATH"
exit 1
fi
# Determine docker-compose command
if docker compose version &> /dev/null 2>&1; then
DOCKER_COMPOSE="docker compose"
else
DOCKER_COMPOSE="docker-compose"
fi
print_info "Using docker-compose command: $DOCKER_COMPOSE"
echo ""
# Change to scripts directory
cd "$SCRIPT_DIR"
# Parse arguments
SKIP_BUILD=false
KEEP_RUNNING=false
RUN_RELAY_TESTER=false
while [[ $# -gt 0 ]]; do
case $1 in
--skip-build)
SKIP_BUILD=true
shift
;;
--keep-running)
KEEP_RUNNING=true
shift
;;
--relay-tester)
RUN_RELAY_TESTER=true
shift
;;
*)
echo "Unknown option: $1"
echo "Usage: $0 [--skip-build] [--keep-running] [--relay-tester]"
exit 1
;;
esac
done
# Cleanup function
cleanup() {
if [ "$KEEP_RUNNING" = false ]; then
print_info "Cleaning up containers..."
$DOCKER_COMPOSE -f docker-compose-test.yml down
print_success "Cleanup complete"
else
print_info "Containers left running (--keep-running)"
echo ""
print_info "To stop: cd $SCRIPT_DIR && $DOCKER_COMPOSE -f docker-compose-test.yml down"
print_info "View logs: $DOCKER_COMPOSE -f docker-compose-test.yml logs -f"
print_info "ORLY: http://localhost:3334"
print_info "Dgraph: http://localhost:8080"
print_info "Ratel: http://localhost:8000"
fi
}
# Set trap for cleanup
if [ "$KEEP_RUNNING" = false ]; then
trap cleanup EXIT
fi
# Stop any existing containers
print_info "Stopping any existing containers..."
$DOCKER_COMPOSE -f docker-compose-test.yml down --remove-orphans
echo ""
# Build images if not skipping
if [ "$SKIP_BUILD" = false ]; then
print_info "Building ORLY docker image..."
$DOCKER_COMPOSE -f docker-compose-test.yml build orly
print_success "Build complete"
echo ""
fi
# Start dgraph
print_info "Starting dgraph server..."
$DOCKER_COMPOSE -f docker-compose-test.yml up -d dgraph
# Wait for dgraph to be healthy
print_info "Waiting for dgraph to be healthy..."
MAX_WAIT=60
WAITED=0
while [ $WAITED -lt $MAX_WAIT ]; do
if docker exec orly-dgraph curl -sf http://localhost:8080/health > /dev/null 2>&1; then
print_success "Dgraph is healthy"
break
fi
sleep 2
WAITED=$((WAITED + 2))
if [ $WAITED -ge $MAX_WAIT ]; then
print_error "Dgraph failed to become healthy after ${MAX_WAIT}s"
docker logs orly-dgraph
exit 1
fi
done
echo ""
# Start ORLY
print_info "Starting ORLY relay with dgraph backend..."
$DOCKER_COMPOSE -f docker-compose-test.yml up -d orly
# Wait for ORLY to be healthy
print_info "Waiting for ORLY to be healthy..."
MAX_WAIT=60
WAITED=0
while [ $WAITED -lt $MAX_WAIT ]; do
if curl -sf http://localhost:3334/ > /dev/null 2>&1; then
print_success "ORLY is healthy and responding"
break
fi
sleep 2
WAITED=$((WAITED + 2))
if [ $WAITED -ge $MAX_WAIT ]; then
print_error "ORLY failed to become healthy after ${MAX_WAIT}s"
echo ""
print_info "ORLY logs:"
docker logs orly-relay
exit 1
fi
done
echo ""
# Check ORLY version
print_info "Checking ORLY version..."
ORLY_VERSION=$(docker exec orly-relay /app/orly version 2>&1 | head -1 || echo "unknown")
echo "ORLY version: $ORLY_VERSION"
echo ""
# Verify dgraph connection
print_info "Verifying dgraph connection..."
if docker logs orly-relay 2>&1 | grep -q "successfully connected to dgraph"; then
print_success "ORLY successfully connected to dgraph"
elif docker logs orly-relay 2>&1 | grep -q "dgraph"; then
print_info "ORLY dgraph logs:"
docker logs orly-relay 2>&1 | grep -i dgraph
else
print_info "No explicit dgraph connection message (may be using badger)"
fi
echo ""
# Basic connectivity test
print_info "Testing basic relay connectivity..."
if curl -sf http://localhost:3334/ > /dev/null 2>&1; then
print_success "ORLY is accessible at http://localhost:3334"
else
print_error "Failed to connect to ORLY"
exit 1
fi
echo ""
# Test WebSocket connection
print_info "Testing WebSocket connection..."
if command -v websocat &> /dev/null; then
TEST_REQ='["REQ","test",{"kinds":[1],"limit":1}]'
if echo "$TEST_REQ" | timeout 5 websocat ws://localhost:3334 2>/dev/null | grep -q "EOSE"; then
print_success "WebSocket connection successful"
else
print_info "WebSocket test inconclusive (may need events)"
fi
elif command -v wscat &> /dev/null; then
print_info "Testing with wscat..."
# wscat test would go here
else
print_info "WebSocket testing tools not available (install websocat or wscat)"
fi
echo ""
# Run relay-tester if requested
if [ "$RUN_RELAY_TESTER" = true ]; then
print_info "Building relay-tester image..."
$DOCKER_COMPOSE -f docker-compose-test.yml build relay-tester
echo ""
print_info "Running relay-tester against ORLY..."
if $DOCKER_COMPOSE -f docker-compose-test.yml run --rm relay-tester -url ws://orly:3334; then
print_success "Relay-tester passed!"
else
print_error "Relay-tester failed"
echo ""
print_info "ORLY logs:"
docker logs orly-relay --tail 50
exit 1
fi
echo ""
fi
# Show container status
print_info "Container status:"
$DOCKER_COMPOSE -f docker-compose-test.yml ps
echo ""
# Show useful information
print_success "All tests passed!"
echo ""
print_info "Endpoints:"
echo " ORLY WebSocket: ws://localhost:3334"
echo " ORLY HTTP: http://localhost:3334"
echo " Dgraph HTTP: http://localhost:8080"
echo " Dgraph gRPC: localhost:9080"
echo " Ratel UI: http://localhost:8000"
echo ""
if [ "$KEEP_RUNNING" = false ]; then
print_info "Containers will be stopped on script exit"
else
print_info "Containers are running. Use --keep-running flag was set."
fi
exit 0