diff options
Diffstat (limited to 'test/postgres')
| -rw-r--r-- | test/postgres/Makefile | 22 | ||||
| -rw-r--r-- | test/postgres/docker-compose.yml | 41 | ||||
| -rw-r--r-- | test/postgres/producer.go | 27 | ||||
| -rwxr-xr-x | test/postgres/run-tests.sh | 56 |
4 files changed, 75 insertions, 71 deletions
diff --git a/test/postgres/Makefile b/test/postgres/Makefile index 13813055c..fd177f49b 100644 --- a/test/postgres/Makefile +++ b/test/postgres/Makefile @@ -41,23 +41,23 @@ all: ## Run complete test suite (start -> produce -> test) # Development targets dev-start: ## Start services for development @echo "Starting development environment..." - @docker-compose up -d seaweedfs postgres-server + @docker compose up -d seaweedfs postgres-server || (echo "=== Container startup failed, showing logs ===" && docker compose logs && exit 1) @echo "Services started. Run 'make dev-logs' to watch logs." dev-logs: ## Follow logs for development - @docker-compose logs -f seaweedfs postgres-server + @docker compose logs -f seaweedfs postgres-server dev-rebuild: ## Rebuild and restart services - @docker-compose down - @docker-compose up -d --build seaweedfs postgres-server + @docker compose down + @docker compose up -d --build seaweedfs postgres-server # Individual service targets start-seaweedfs: ## Start only SeaweedFS - @docker-compose up -d seaweedfs + @docker compose up -d seaweedfs restart-postgres: ## Start only PostgreSQL server - @docker-compose down -d postgres-server - @docker-compose up -d --build seaweedfs postgres-server + @docker compose down -d postgres-server + @docker compose up -d --build seaweedfs postgres-server # Testing targets test-basic: ## Run basic connectivity test @@ -65,16 +65,16 @@ test-basic: ## Run basic connectivity test psql -h postgres-server -p 5432 -U seaweedfs -d default -c "SELECT version();" test-producer: ## Test data producer only - @docker-compose up --build mq-producer + @docker compose up --build mq-producer test-client: ## Test client only - @docker-compose up --build postgres-client + @docker compose up --build postgres-client # Cleanup targets clean-images: ## Remove Docker images - @docker-compose down + @docker compose down @docker image prune -f clean-all: ## Complete cleanup including images - @docker-compose down -v --rmi all + @docker compose down -v --rmi all @docker system prune -f diff --git a/test/postgres/docker-compose.yml b/test/postgres/docker-compose.yml index fee952328..6d222f83d 100644 --- a/test/postgres/docker-compose.yml +++ b/test/postgres/docker-compose.yml @@ -15,30 +15,29 @@ services: - "27777:17777" # MQ Broker port (mapped to avoid conflicts) volumes: - seaweedfs_data:/data - - ./config:/etc/seaweedfs - command: > - ./weed server - -dir=/data - -master.volumeSizeLimitMB=50 - -master.port=9333 - -metricsPort=9533 - -volume.max=0 - -volume.port=8085 - -volume.preStopSeconds=1 - -filer=true - -filer.port=8888 - -s3=true - -s3.port=8333 - -s3.config=/etc/seaweedfs/s3config.json - -webdav=false - -s3.allowEmptyFolder=false - -mq.broker=true - -mq.agent=true - -ip=seaweedfs + command: + - ./weed + - server + - -dir=/data + - -master.volumeSizeLimitMB=50 + - -master.port=9333 + - -metricsPort=9533 + - -volume.max=0 + - -volume.port=8085 + - -volume.preStopSeconds=1 + - -filer=true + - -filer.port=8888 + - -s3=true + - -s3.port=8333 + - -webdav=false + - -s3.allowEmptyFolder=false + - -mq.broker=true + - -mq.agent=true + - -ip=seaweedfs networks: - seaweedfs-net healthcheck: - test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://seaweedfs:9333/cluster/status"] + test: ["CMD", "curl", "--fail", "--silent", "http://seaweedfs:9333/cluster/status"] interval: 10s timeout: 5s retries: 5 diff --git a/test/postgres/producer.go b/test/postgres/producer.go index 20a72993f..ecaea6344 100644 --- a/test/postgres/producer.go +++ b/test/postgres/producer.go @@ -8,7 +8,6 @@ import ( "math/big" "math/rand" "os" - "strconv" "strings" "time" @@ -16,6 +15,7 @@ import ( "github.com/seaweedfs/seaweedfs/weed/mq/client/pub_client" "github.com/seaweedfs/seaweedfs/weed/mq/pub_balancer" "github.com/seaweedfs/seaweedfs/weed/mq/topic" + "github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/master_pb" "github.com/seaweedfs/seaweedfs/weed/pb/schema_pb" @@ -103,7 +103,7 @@ func main() { log.Printf("Error creating topic %s.%s: %v", topicConfig.namespace, topicConfig.topic, err) } else { - log.Printf("✓ Successfully created %s.%s", + log.Printf("-Successfully created %s.%s", topicConfig.namespace, topicConfig.topic) } @@ -111,7 +111,7 @@ func main() { time.Sleep(2 * time.Second) } - log.Println("✓ MQ test data creation completed!") + log.Println("-MQ test data creation completed!") log.Println("\nCreated namespaces:") log.Println(" - analytics (user_events, system_logs, metrics)") log.Println(" - ecommerce (product_views, user_events)") @@ -292,24 +292,12 @@ func convertToRecordValue(data interface{}) (*schema_pb.RecordValue, error) { return &schema_pb.RecordValue{Fields: fields}, nil } -// convertHTTPToGRPC converts HTTP address to gRPC address -// Follows SeaweedFS convention: gRPC port = HTTP port + 10000 -func convertHTTPToGRPC(httpAddress string) string { - if strings.Contains(httpAddress, ":") { - parts := strings.Split(httpAddress, ":") - if len(parts) == 2 { - if port, err := strconv.Atoi(parts[1]); err == nil { - return fmt.Sprintf("%s:%d", parts[0], port+10000) - } - } - } - // Fallback: return original address if conversion fails - return httpAddress -} +// No need for convertHTTPToGRPC - pb.ServerAddress.ToGrpcAddress() already handles this // discoverFiler finds a filer from the master server func discoverFiler(masterHTTPAddress string) (string, error) { - masterGRPCAddress := convertHTTPToGRPC(masterHTTPAddress) + httpAddr := pb.ServerAddress(masterHTTPAddress) + masterGRPCAddress := httpAddr.ToGrpcAddress() conn, err := grpc.Dial(masterGRPCAddress, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { @@ -334,7 +322,8 @@ func discoverFiler(masterHTTPAddress string) (string, error) { // Use the first available filer and convert HTTP address to gRPC filerHTTPAddress := resp.ClusterNodes[0].Address - return convertHTTPToGRPC(filerHTTPAddress), nil + httpAddr := pb.ServerAddress(filerHTTPAddress) + return httpAddr.ToGrpcAddress(), nil } // discoverBroker finds the broker balancer using filer lock mechanism diff --git a/test/postgres/run-tests.sh b/test/postgres/run-tests.sh index 2c23d2d2d..6ca85958c 100755 --- a/test/postgres/run-tests.sh +++ b/test/postgres/run-tests.sh @@ -11,6 +11,22 @@ 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 @@ -19,8 +35,8 @@ wait_for_service() { 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}" + if $DOCKER_COMPOSE_CMD ps $service | grep -q "healthy\|Up"; then + echo -e "${GREEN}- $service is ready${NC}" return 0 fi sleep 2 @@ -28,7 +44,7 @@ wait_for_service() { echo -n "." done - echo -e "${RED}✗ Timeout waiting for $service${NC}" + echo -e "${RED}x Timeout waiting for $service${NC}" return 1 } @@ -36,7 +52,7 @@ wait_for_service() { show_logs() { local service=$1 echo -e "${BLUE}=== $service logs ===${NC}" - docker-compose logs --tail=20 $service + $DOCKER_COMPOSE_CMD logs --tail=20 $service echo } @@ -44,12 +60,12 @@ show_logs() { case "$1" in "start") echo -e "${YELLOW}Starting SeaweedFS cluster and PostgreSQL server...${NC}" - docker-compose up -d seaweedfs postgres-server + $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 -e "${GREEN}- SeaweedFS and PostgreSQL server are running${NC}" echo echo "You can now:" echo " • Run data producer: $0 produce" @@ -61,33 +77,33 @@ case "$1" in "produce") echo -e "${YELLOW}Creating MQ test data...${NC}" - docker-compose up --build mq-producer + $DOCKER_COMPOSE_CMD up --build mq-producer if [ $? -eq 0 ]; then - echo -e "${GREEN}✓ Test data created successfully${NC}" + echo -e "${GREEN}- Test data created successfully${NC}" echo echo "You can now run: $0 test" else - echo -e "${RED}✗ Data production failed${NC}" + echo -e "${RED}x Data production failed${NC}" show_logs "mq-producer" fi ;; "test") echo -e "${YELLOW}Running PostgreSQL client tests...${NC}" - docker-compose up --build postgres-client + $DOCKER_COMPOSE_CMD up --build postgres-client if [ $? -eq 0 ]; then - echo -e "${GREEN}✓ Client tests completed${NC}" + echo -e "${GREEN}- Client tests completed${NC}" else - echo -e "${RED}✗ Client tests failed${NC}" + 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 run --rm psql-cli psql -h postgres-server -p 5432 -U seaweedfs -d default + $DOCKER_COMPOSE_CMD run --rm psql-cli psql -h postgres-server -p 5432 -U seaweedfs -d default ;; "logs") @@ -97,20 +113,20 @@ case "$1" in "status") echo -e "${BLUE}=== Service Status ===${NC}" - docker-compose ps + $DOCKER_COMPOSE_CMD ps ;; "stop") echo -e "${YELLOW}Stopping all services...${NC}" - docker-compose down - echo -e "${GREEN}✓ All services stopped${NC}" + $DOCKER_COMPOSE_CMD down + echo -e "${GREEN}- All services stopped${NC}" ;; "clean") echo -e "${YELLOW}Cleaning up everything (including data)...${NC}" - docker-compose down -v + $DOCKER_COMPOSE_CMD down -v docker system prune -f - echo -e "${GREEN}✓ Cleanup completed${NC}" + echo -e "${GREEN}- Cleanup completed${NC}" ;; "all") @@ -119,13 +135,13 @@ case "$1" in # Start services (wait_for_service ensures they're ready) $0 start - # Create data (docker-compose up is synchronous) + # Create data ($DOCKER_COMPOSE_CMD up is synchronous) $0 produce # Run tests $0 test - echo -e "${GREEN}✓ Complete test suite finished${NC}" + echo -e "${GREEN}- Complete test suite finished${NC}" ;; *) |
