You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							169 lines
						
					
					
						
							5.0 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							169 lines
						
					
					
						
							5.0 KiB
						
					
					
				
								#!/bin/bash
							 | 
						|
								
							 | 
						|
								set -e
							 | 
						|
								
							 | 
						|
								# Colors for output
							 | 
						|
								RED='\033[0;31m'
							 | 
						|
								GREEN='\033[0;32m'
							 | 
						|
								YELLOW='\033[1;33m'
							 | 
						|
								BLUE='\033[0;34m'
							 | 
						|
								NC='\033[0m' # No Color
							 | 
						|
								
							 | 
						|
								echo -e "${BLUE}=== SeaweedFS PostgreSQL Test Setup ===${NC}"
							 | 
						|
								
							 | 
						|
								# Function to get the correct docker compose command
							 | 
						|
								get_docker_compose_cmd() {
							 | 
						|
								    if command -v docker &> /dev/null && docker compose version &> /dev/null 2>&1; then
							 | 
						|
								        echo "docker compose"
							 | 
						|
								    elif command -v docker-compose &> /dev/null; then
							 | 
						|
								        echo "docker-compose"
							 | 
						|
								    else
							 | 
						|
								        echo -e "${RED}x Neither 'docker compose' nor 'docker-compose' is available${NC}"
							 | 
						|
								        exit 1
							 | 
						|
								    fi
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								# Get the docker compose command to use
							 | 
						|
								DOCKER_COMPOSE_CMD=$(get_docker_compose_cmd)
							 | 
						|
								echo -e "${BLUE}Using: ${DOCKER_COMPOSE_CMD}${NC}"
							 | 
						|
								
							 | 
						|
								# Function to wait for service
							 | 
						|
								wait_for_service() {
							 | 
						|
								    local service=$1
							 | 
						|
								    local max_wait=$2
							 | 
						|
								    local count=0
							 | 
						|
								    
							 | 
						|
								    echo -e "${YELLOW}Waiting for $service to be ready...${NC}"
							 | 
						|
								    while [ $count -lt $max_wait ]; do
							 | 
						|
								        if $DOCKER_COMPOSE_CMD ps $service | grep -q "healthy\|Up"; then
							 | 
						|
								            echo -e "${GREEN}- $service is ready${NC}"
							 | 
						|
								            return 0
							 | 
						|
								        fi
							 | 
						|
								        sleep 2
							 | 
						|
								        count=$((count + 1))
							 | 
						|
								        echo -n "."
							 | 
						|
								    done
							 | 
						|
								    
							 | 
						|
								    echo -e "${RED}x Timeout waiting for $service${NC}"
							 | 
						|
								    return 1
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								# Function to show logs
							 | 
						|
								show_logs() {
							 | 
						|
								    local service=$1
							 | 
						|
								    echo -e "${BLUE}=== $service logs ===${NC}"
							 | 
						|
								    $DOCKER_COMPOSE_CMD logs --tail=20 $service
							 | 
						|
								    echo
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								# Parse command line arguments
							 | 
						|
								case "$1" in
							 | 
						|
								    "start")
							 | 
						|
								        echo -e "${YELLOW}Starting SeaweedFS cluster and PostgreSQL server...${NC}"
							 | 
						|
								        $DOCKER_COMPOSE_CMD up -d seaweedfs postgres-server
							 | 
						|
								        
							 | 
						|
								        wait_for_service "seaweedfs" 30
							 | 
						|
								        wait_for_service "postgres-server" 15
							 | 
						|
								        
							 | 
						|
								        echo -e "${GREEN}- SeaweedFS and PostgreSQL server are running${NC}"
							 | 
						|
								        echo
							 | 
						|
								        echo "You can now:"
							 | 
						|
								        echo "  • Run data producer: $0 produce"
							 | 
						|
								        echo "  • Run test client: $0 test"
							 | 
						|
								        echo "  • Connect with psql: $0 psql"
							 | 
						|
								        echo "  • View logs: $0 logs [service]"
							 | 
						|
								        echo "  • Stop services: $0 stop"
							 | 
						|
								        ;;
							 | 
						|
								        
							 | 
						|
								    "produce")
							 | 
						|
								        echo -e "${YELLOW}Creating MQ test data...${NC}"
							 | 
						|
								        $DOCKER_COMPOSE_CMD up --build mq-producer
							 | 
						|
								        
							 | 
						|
								        if [ $? -eq 0 ]; then
							 | 
						|
								            echo -e "${GREEN}- Test data created successfully${NC}"
							 | 
						|
								            echo
							 | 
						|
								            echo "You can now run: $0 test"
							 | 
						|
								        else
							 | 
						|
								            echo -e "${RED}x Data production failed${NC}"
							 | 
						|
								            show_logs "mq-producer"
							 | 
						|
								        fi
							 | 
						|
								        ;;
							 | 
						|
								        
							 | 
						|
								    "test")
							 | 
						|
								        echo -e "${YELLOW}Running PostgreSQL client tests...${NC}"
							 | 
						|
								        $DOCKER_COMPOSE_CMD up --build postgres-client
							 | 
						|
								        
							 | 
						|
								        if [ $? -eq 0 ]; then
							 | 
						|
								            echo -e "${GREEN}- Client tests completed${NC}"
							 | 
						|
								        else
							 | 
						|
								            echo -e "${RED}x Client tests failed${NC}"
							 | 
						|
								            show_logs "postgres-client"
							 | 
						|
								        fi
							 | 
						|
								        ;;
							 | 
						|
								        
							 | 
						|
								    "psql")
							 | 
						|
								        echo -e "${YELLOW}Connecting to PostgreSQL with psql...${NC}"
							 | 
						|
								        $DOCKER_COMPOSE_CMD run --rm psql-cli psql -h postgres-server -p 5432 -U seaweedfs -d default
							 | 
						|
								        ;;
							 | 
						|
								        
							 | 
						|
								    "logs")
							 | 
						|
								        service=${2:-"seaweedfs"}
							 | 
						|
								        show_logs "$service"
							 | 
						|
								        ;;
							 | 
						|
								        
							 | 
						|
								    "status")
							 | 
						|
								        echo -e "${BLUE}=== Service Status ===${NC}"
							 | 
						|
								        $DOCKER_COMPOSE_CMD ps
							 | 
						|
								        ;;
							 | 
						|
								        
							 | 
						|
								    "stop")
							 | 
						|
								        echo -e "${YELLOW}Stopping all services...${NC}"
							 | 
						|
								        $DOCKER_COMPOSE_CMD down
							 | 
						|
								        echo -e "${GREEN}- All services stopped${NC}"
							 | 
						|
								        ;;
							 | 
						|
								        
							 | 
						|
								    "clean")
							 | 
						|
								        echo -e "${YELLOW}Cleaning up everything (including data)...${NC}"
							 | 
						|
								        $DOCKER_COMPOSE_CMD down -v
							 | 
						|
								        docker system prune -f
							 | 
						|
								        echo -e "${GREEN}- Cleanup completed${NC}"
							 | 
						|
								        ;;
							 | 
						|
								        
							 | 
						|
								    "all")
							 | 
						|
								        echo -e "${YELLOW}Running complete test suite...${NC}"
							 | 
						|
								        
							 | 
						|
								        # Start services (wait_for_service ensures they're ready)
							 | 
						|
								        $0 start
							 | 
						|
								        
							 | 
						|
								        # Create data ($DOCKER_COMPOSE_CMD up is synchronous)
							 | 
						|
								        $0 produce
							 | 
						|
								        
							 | 
						|
								        # Run tests
							 | 
						|
								        $0 test
							 | 
						|
								        
							 | 
						|
								        echo -e "${GREEN}- Complete test suite finished${NC}"
							 | 
						|
								        ;;
							 | 
						|
								        
							 | 
						|
								    *)
							 | 
						|
								        echo "Usage: $0 {start|produce|test|psql|logs|status|stop|clean|all}"
							 | 
						|
								        echo
							 | 
						|
								        echo "Commands:"
							 | 
						|
								        echo "  start     - Start SeaweedFS and PostgreSQL server"
							 | 
						|
								        echo "  produce   - Create MQ test data (run after start)"
							 | 
						|
								        echo "  test      - Run PostgreSQL client tests (run after produce)"
							 | 
						|
								        echo "  psql      - Connect with psql CLI"
							 | 
						|
								        echo "  logs      - Show service logs (optionally specify service name)"
							 | 
						|
								        echo "  status    - Show service status"
							 | 
						|
								        echo "  stop      - Stop all services"
							 | 
						|
								        echo "  clean     - Stop and remove all data"
							 | 
						|
								        echo "  all       - Run complete test suite (start -> produce -> test)"
							 | 
						|
								        echo
							 | 
						|
								        echo "Example workflow:"
							 | 
						|
								        echo "  $0 all                # Complete automated test"
							 | 
						|
								        echo "  $0 start              # Manual step-by-step"
							 | 
						|
								        echo "  $0 produce"
							 | 
						|
								        echo "  $0 test"
							 | 
						|
								        echo "  $0 psql               # Interactive testing"
							 | 
						|
								        exit 1
							 | 
						|
								        ;;
							 | 
						|
								esac
							 |