251 lines
6.6 KiB
Bash
Executable File
251 lines
6.6 KiB
Bash
Executable File
#!/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
|