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.
166 lines
6.7 KiB
166 lines
6.7 KiB
# Makefile for SeaweedFS S3 IAM Integration Tests with Docker Compose
|
|
.PHONY: help docker-build docker-up docker-down docker-logs docker-test docker-clean docker-status docker-keycloak-setup
|
|
|
|
# Default target
|
|
.DEFAULT_GOAL := help
|
|
|
|
# Docker Compose configuration
|
|
COMPOSE_FILE := docker-compose.yml
|
|
PROJECT_NAME := seaweedfs-iam-test
|
|
|
|
help: ## Show this help message
|
|
@echo "SeaweedFS S3 IAM Integration Tests - Docker Compose"
|
|
@echo ""
|
|
@echo "Available commands:"
|
|
@echo ""
|
|
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
|
@echo ""
|
|
@echo "Environment:"
|
|
@echo " COMPOSE_FILE: $(COMPOSE_FILE)"
|
|
@echo " PROJECT_NAME: $(PROJECT_NAME)"
|
|
|
|
docker-build: ## Build local SeaweedFS image for testing
|
|
@echo "🔨 Building local SeaweedFS image..."
|
|
@echo "Creating build directory..."
|
|
@cd ../../.. && mkdir -p .docker-build
|
|
@echo "Building weed binary..."
|
|
@cd ../../.. && cd weed && go build -o ../.docker-build/weed
|
|
@echo "Copying required files to build directory..."
|
|
@cd ../../.. && cp docker/filer.toml .docker-build/ && cp docker/entrypoint.sh .docker-build/
|
|
@echo "Building Docker image..."
|
|
@cd ../../.. && docker build -f docker/Dockerfile.local -t local/seaweedfs:latest .docker-build/
|
|
@echo "Cleaning up build directory..."
|
|
@cd ../../.. && rm -rf .docker-build
|
|
@echo "✅ Built local/seaweedfs:latest"
|
|
|
|
docker-up: ## Start all services with Docker Compose
|
|
@echo "🚀 Starting SeaweedFS S3 IAM integration environment..."
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) up -d
|
|
@echo ""
|
|
@echo "✅ Environment started! Services will be available at:"
|
|
@echo " 🔐 Keycloak: http://localhost:8080 (admin/admin)"
|
|
@echo " 🗄️ S3 API: http://localhost:8333"
|
|
@echo " 📁 Filer: http://localhost:8888"
|
|
@echo " 🎯 Master: http://localhost:9333"
|
|
@echo ""
|
|
@echo "⏳ Waiting for all services to be healthy..."
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) ps
|
|
|
|
docker-down: ## Stop and remove all containers
|
|
@echo "🛑 Stopping SeaweedFS S3 IAM integration environment..."
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) down -v
|
|
@echo "✅ Environment stopped and cleaned up"
|
|
|
|
docker-restart: docker-down docker-up ## Restart the entire environment
|
|
|
|
docker-logs: ## Show logs from all services
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) logs -f
|
|
|
|
docker-logs-s3: ## Show logs from S3 service only
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) logs -f weed-s3
|
|
|
|
docker-logs-keycloak: ## Show logs from Keycloak service only
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) logs -f keycloak
|
|
|
|
docker-status: ## Check status of all services
|
|
@echo "📊 Service Status:"
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) ps
|
|
@echo ""
|
|
@echo "🏥 Health Checks:"
|
|
@docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep $(PROJECT_NAME) || true
|
|
|
|
docker-test: docker-wait-healthy ## Run integration tests against Docker environment
|
|
@echo "🧪 Running SeaweedFS S3 IAM integration tests..."
|
|
@echo ""
|
|
@KEYCLOAK_URL=http://localhost:8080 go test -v -timeout 10m ./...
|
|
|
|
docker-test-single: ## Run a single test (use TEST_NAME=TestName)
|
|
@if [ -z "$(TEST_NAME)" ]; then \
|
|
echo "❌ Please specify TEST_NAME, e.g., make docker-test-single TEST_NAME=TestKeycloakAuthentication"; \
|
|
exit 1; \
|
|
fi
|
|
@echo "🧪 Running single test: $(TEST_NAME)"
|
|
@KEYCLOAK_URL=http://localhost:8080 go test -v -run "$(TEST_NAME)" -timeout 5m ./...
|
|
|
|
docker-keycloak-setup: ## Manually run Keycloak setup (usually automatic)
|
|
@echo "🔧 Running Keycloak setup manually..."
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) run --rm keycloak-setup
|
|
|
|
docker-clean: ## Clean up everything (containers, volumes, images)
|
|
@echo "🧹 Cleaning up Docker environment..."
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) down -v --remove-orphans
|
|
@docker system prune -f
|
|
@echo "✅ Cleanup complete"
|
|
|
|
docker-shell-s3: ## Get shell access to S3 container
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) exec weed-s3 sh
|
|
|
|
docker-shell-keycloak: ## Get shell access to Keycloak container
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) exec keycloak bash
|
|
|
|
docker-debug: ## Show debug information
|
|
@echo "🔍 Docker Environment Debug Information"
|
|
@echo ""
|
|
@echo "📋 Docker Compose Config:"
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) config
|
|
@echo ""
|
|
@echo "📊 Container Status:"
|
|
@docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) ps
|
|
@echo ""
|
|
@echo "🌐 Network Information:"
|
|
@docker network ls | grep $(PROJECT_NAME) || echo "No networks found"
|
|
@echo ""
|
|
@echo "💾 Volume Information:"
|
|
@docker volume ls | grep $(PROJECT_NAME) || echo "No volumes found"
|
|
|
|
# Quick test targets
|
|
docker-test-auth: ## Quick test of authentication only
|
|
@KEYCLOAK_URL=http://localhost:8080 go test -v -run "TestKeycloakAuthentication" -timeout 2m ./...
|
|
|
|
docker-test-roles: ## Quick test of role mapping only
|
|
@KEYCLOAK_URL=http://localhost:8080 go test -v -run "TestKeycloakRoleMapping" -timeout 2m ./...
|
|
|
|
docker-test-s3ops: ## Quick test of S3 operations only
|
|
@KEYCLOAK_URL=http://localhost:8080 go test -v -run "TestKeycloakS3Operations" -timeout 2m ./...
|
|
|
|
# Development workflow
|
|
docker-dev: docker-down docker-up docker-test ## Complete dev workflow: down -> up -> test
|
|
|
|
# Show service URLs for easy access
|
|
docker-urls: ## Display all service URLs
|
|
@echo "🌐 Service URLs:"
|
|
@echo ""
|
|
@echo " 🔐 Keycloak Admin: http://localhost:8080 (admin/admin)"
|
|
@echo " 🔐 Keycloak Realm: http://localhost:8080/realms/seaweedfs-test"
|
|
@echo " 📁 S3 API: http://localhost:8333"
|
|
@echo " 📂 Filer UI: http://localhost:8888"
|
|
@echo " 🎯 Master UI: http://localhost:9333"
|
|
@echo " 💾 Volume Server: http://localhost:8080"
|
|
@echo ""
|
|
@echo " 📖 Test Users:"
|
|
@echo " • admin-user (password: adminuser123) - s3-admin role"
|
|
@echo " • read-user (password: readuser123) - s3-read-only role"
|
|
@echo " • write-user (password: writeuser123) - s3-read-write role"
|
|
@echo " • write-only-user (password: writeonlyuser123) - s3-write-only role"
|
|
|
|
# Wait targets for CI/CD
|
|
docker-wait-healthy: ## Wait for all services to be healthy
|
|
@echo "⏳ Waiting for all services to be healthy..."
|
|
@timeout 300 bash -c ' \
|
|
required_services="keycloak weed-master weed-volume weed-filer weed-s3"; \
|
|
while true; do \
|
|
all_healthy=true; \
|
|
for service in $$required_services; do \
|
|
if ! docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) ps $$service | grep -q "healthy"; then \
|
|
echo "Waiting for $$service to be healthy..."; \
|
|
all_healthy=false; \
|
|
break; \
|
|
fi; \
|
|
done; \
|
|
if [ "$$all_healthy" = "true" ]; then \
|
|
break; \
|
|
fi; \
|
|
sleep 5; \
|
|
done \
|
|
'
|
|
@echo "✅ All required services are healthy"
|