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.1 KiB
169 lines
5.1 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}✗ 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}✗ 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}✗ 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}✗ 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
|