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.
 
 
 
 
 
 

153 lines
4.5 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 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 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 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 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 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 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 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 ps
;;
"stop")
echo -e "${YELLOW}Stopping all services...${NC}"
docker-compose down
echo -e "${GREEN}✓ All services stopped${NC}"
;;
"clean")
echo -e "${YELLOW}Cleaning up everything (including data)...${NC}"
docker-compose 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 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