aboutsummaryrefslogtreecommitdiff
path: root/test/postgres
diff options
context:
space:
mode:
Diffstat (limited to 'test/postgres')
-rw-r--r--test/postgres/Makefile22
-rw-r--r--test/postgres/docker-compose.yml41
-rw-r--r--test/postgres/producer.go27
-rwxr-xr-xtest/postgres/run-tests.sh56
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}"
;;
*)