optimizing badger cache, won a 10-15% improvement in most benchmarks
This commit is contained in:
250
scripts/test-docker.sh
Executable file
250
scripts/test-docker.sh
Executable file
@@ -0,0 +1,250 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user