#!/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