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.
		
		
		
		
		
			
		
			
				
					
					
						
							365 lines
						
					
					
						
							14 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							365 lines
						
					
					
						
							14 KiB
						
					
					
				
								# SeaweedFS S3 IAM Integration Tests Makefile
							 | 
						|
								
							 | 
						|
								.PHONY: all test clean setup start-services stop-services wait-for-services help
							 | 
						|
								
							 | 
						|
								# Default target
							 | 
						|
								all: test
							 | 
						|
								
							 | 
						|
								# Test configuration
							 | 
						|
								WEED_BINARY ?= /Users/chrislu/go/bin/weed
							 | 
						|
								LOG_LEVEL ?= 2
							 | 
						|
								S3_PORT ?= 8333
							 | 
						|
								FILER_PORT ?= 8888
							 | 
						|
								MASTER_PORT ?= 9333
							 | 
						|
								VOLUME_PORT ?= 8080
							 | 
						|
								TEST_TIMEOUT ?= 30m
							 | 
						|
								
							 | 
						|
								# Service PIDs
							 | 
						|
								MASTER_PID_FILE = /tmp/weed-master.pid
							 | 
						|
								VOLUME_PID_FILE = /tmp/weed-volume.pid  
							 | 
						|
								FILER_PID_FILE = /tmp/weed-filer.pid
							 | 
						|
								S3_PID_FILE = /tmp/weed-s3.pid
							 | 
						|
								
							 | 
						|
								help: ## Show this help message
							 | 
						|
									@echo "SeaweedFS S3 IAM Integration Tests"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "Usage:"
							 | 
						|
									@echo "  make [target]"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "Targets:"
							 | 
						|
									@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "  %-20s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
							 | 
						|
									@echo ""
							 | 
						|
									@echo "Docker Compose Targets:"
							 | 
						|
									@echo "  docker-test          Run tests with Docker Compose including Keycloak"
							 | 
						|
									@echo "  docker-up            Start all services with Docker Compose"
							 | 
						|
									@echo "  docker-down          Stop all Docker Compose services"
							 | 
						|
									@echo "  docker-logs          Show logs from all services"
							 | 
						|
								
							 | 
						|
								test: clean setup start-services wait-for-services run-tests stop-services ## Run complete IAM integration test suite
							 | 
						|
								
							 | 
						|
								test-quick: run-tests ## Run tests assuming services are already running
							 | 
						|
								
							 | 
						|
								run-tests: ## Execute the Go tests
							 | 
						|
									@echo "🧪 Running S3 IAM Integration Tests..."
							 | 
						|
									go test -v -timeout $(TEST_TIMEOUT) ./...
							 | 
						|
								
							 | 
						|
								setup: ## Setup test environment
							 | 
						|
									@echo "🔧 Setting up test environment..."
							 | 
						|
									@mkdir -p test-volume-data/filerldb2
							 | 
						|
									@mkdir -p test-volume-data/m9333
							 | 
						|
								
							 | 
						|
								start-services: ## Start SeaweedFS services for testing
							 | 
						|
									@echo "🚀 Starting SeaweedFS services..."
							 | 
						|
									@echo "Starting master server..."
							 | 
						|
									@$(WEED_BINARY) master -port=$(MASTER_PORT) \
							 | 
						|
										-mdir=test-volume-data/m9333 > weed-master.log 2>&1 & \
							 | 
						|
										echo $$! > $(MASTER_PID_FILE)
							 | 
						|
									
							 | 
						|
									@sleep 2
							 | 
						|
									
							 | 
						|
									@echo "Starting volume server..."
							 | 
						|
									@$(WEED_BINARY) volume -port=$(VOLUME_PORT) \
							 | 
						|
										-dataCenter=dc1 -rack=rack1 \
							 | 
						|
										-dir=test-volume-data \
							 | 
						|
										-mserver=localhost:$(MASTER_PORT) > weed-volume.log 2>&1 & \
							 | 
						|
										echo $$! > $(VOLUME_PID_FILE)
							 | 
						|
									
							 | 
						|
									@sleep 2
							 | 
						|
									
							 | 
						|
									@echo "Starting filer server..."
							 | 
						|
									@$(WEED_BINARY) filer -port=$(FILER_PORT) \
							 | 
						|
										-defaultStoreDir=test-volume-data/filerldb2 \
							 | 
						|
										-master=localhost:$(MASTER_PORT) > weed-filer.log 2>&1 & \
							 | 
						|
										echo $$! > $(FILER_PID_FILE)
							 | 
						|
									
							 | 
						|
									@sleep 2
							 | 
						|
									
							 | 
						|
									@echo "Starting S3 API server with IAM..."
							 | 
						|
									@$(WEED_BINARY) -v=3 s3 -port=$(S3_PORT) \
							 | 
						|
										-filer=localhost:$(FILER_PORT) \
							 | 
						|
										-config=test_config.json \
							 | 
						|
								                -iam.config=$(shell pwd)/iam_config.json > weed-s3.log 2>&1 & \
							 | 
						|
										echo $$! > $(S3_PID_FILE)
							 | 
						|
									
							 | 
						|
									@echo "✅ All services started"
							 | 
						|
								
							 | 
						|
								wait-for-services: ## Wait for all services to be ready
							 | 
						|
									@echo "⏳ Waiting for services to be ready..."
							 | 
						|
									@echo "Checking master server..."
							 | 
						|
									@timeout 30 bash -c 'until curl -s http://localhost:$(MASTER_PORT)/cluster/status > /dev/null; do sleep 1; done' || (echo "❌ Master failed to start" && exit 1)
							 | 
						|
									
							 | 
						|
									@echo "Checking filer server..."
							 | 
						|
									@timeout 30 bash -c 'until curl -s http://localhost:$(FILER_PORT)/status > /dev/null; do sleep 1; done' || (echo "❌ Filer failed to start" && exit 1)
							 | 
						|
									
							 | 
						|
									@echo "Checking S3 API server..."
							 | 
						|
									@timeout 30 bash -c 'until curl -s http://localhost:$(S3_PORT) > /dev/null 2>&1; do sleep 1; done' || (echo "❌ S3 API failed to start" && exit 1)
							 | 
						|
									
							 | 
						|
									@sleep 3
							 | 
						|
									@echo "✅ All services are ready"
							 | 
						|
								
							 | 
						|
								stop-services: ## Stop all SeaweedFS services
							 | 
						|
									@echo "🛑 Stopping SeaweedFS services..."
							 | 
						|
									@if [ -f $(S3_PID_FILE) ]; then \
							 | 
						|
										echo "Stopping S3 API server..."; \
							 | 
						|
										kill $$(cat $(S3_PID_FILE)) 2>/dev/null || true; \
							 | 
						|
										rm -f $(S3_PID_FILE); \
							 | 
						|
									fi
							 | 
						|
									@if [ -f $(FILER_PID_FILE) ]; then \
							 | 
						|
										echo "Stopping filer server..."; \
							 | 
						|
										kill $$(cat $(FILER_PID_FILE)) 2>/dev/null || true; \
							 | 
						|
										rm -f $(FILER_PID_FILE); \
							 | 
						|
									fi
							 | 
						|
									@if [ -f $(VOLUME_PID_FILE) ]; then \
							 | 
						|
										echo "Stopping volume server..."; \
							 | 
						|
										kill $$(cat $(VOLUME_PID_FILE)) 2>/dev/null || true; \
							 | 
						|
										rm -f $(VOLUME_PID_FILE); \
							 | 
						|
									fi
							 | 
						|
									@if [ -f $(MASTER_PID_FILE) ]; then \
							 | 
						|
										echo "Stopping master server..."; \
							 | 
						|
										kill $$(cat $(MASTER_PID_FILE)) 2>/dev/null || true; \
							 | 
						|
										rm -f $(MASTER_PID_FILE); \
							 | 
						|
									fi
							 | 
						|
									@echo "✅ All services stopped"
							 | 
						|
								
							 | 
						|
								clean: stop-services ## Clean up test environment
							 | 
						|
									@echo "🧹 Cleaning up test environment..."
							 | 
						|
									@rm -rf test-volume-data
							 | 
						|
									@rm -f weed-*.log
							 | 
						|
									@rm -f *.test
							 | 
						|
									@echo "✅ Cleanup complete"
							 | 
						|
								
							 | 
						|
								logs: ## Show service logs
							 | 
						|
									@echo "📋 Service Logs:"
							 | 
						|
									@echo "=== Master Log ==="
							 | 
						|
									@tail -20 weed-master.log 2>/dev/null || echo "No master log"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "=== Volume Log ==="
							 | 
						|
									@tail -20 weed-volume.log 2>/dev/null || echo "No volume log"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "=== Filer Log ==="
							 | 
						|
									@tail -20 weed-filer.log 2>/dev/null || echo "No filer log"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "=== S3 API Log ==="
							 | 
						|
									@tail -20 weed-s3.log 2>/dev/null || echo "No S3 log"
							 | 
						|
								
							 | 
						|
								status: ## Check service status
							 | 
						|
									@echo "📊 Service Status:"
							 | 
						|
									@echo -n "Master: "; curl -s http://localhost:$(MASTER_PORT)/cluster/status > /dev/null 2>&1 && echo "✅ Running" || echo "❌ Not running"
							 | 
						|
									@echo -n "Filer: "; curl -s http://localhost:$(FILER_PORT)/status > /dev/null 2>&1 && echo "✅ Running" || echo "❌ Not running"
							 | 
						|
									@echo -n "S3 API: "; curl -s http://localhost:$(S3_PORT) > /dev/null 2>&1 && echo "✅ Running" || echo "❌ Not running"
							 | 
						|
								
							 | 
						|
								debug: start-services wait-for-services ## Start services and keep them running for debugging
							 | 
						|
									@echo "🐛 Services started in debug mode. Press Ctrl+C to stop..."
							 | 
						|
									@trap 'make stop-services' INT; \
							 | 
						|
									while true; do \
							 | 
						|
										sleep 1; \
							 | 
						|
									done
							 | 
						|
								
							 | 
						|
								# Test specific scenarios
							 | 
						|
								test-auth: ## Test only authentication scenarios
							 | 
						|
									go test -v -run TestS3IAMAuthentication ./...
							 | 
						|
								
							 | 
						|
								test-policy: ## Test only policy enforcement
							 | 
						|
									go test -v -run TestS3IAMPolicyEnforcement ./...
							 | 
						|
								
							 | 
						|
								test-expiration: ## Test only session expiration
							 | 
						|
									go test -v -run TestS3IAMSessionExpiration ./...
							 | 
						|
								
							 | 
						|
								test-multipart: ## Test only multipart upload IAM integration
							 | 
						|
									go test -v -run TestS3IAMMultipartUploadPolicyEnforcement ./...
							 | 
						|
								
							 | 
						|
								test-bucket-policy: ## Test only bucket policy integration
							 | 
						|
									go test -v -run TestS3IAMBucketPolicyIntegration ./...
							 | 
						|
								
							 | 
						|
								test-context: ## Test only contextual policy enforcement  
							 | 
						|
									go test -v -run TestS3IAMContextualPolicyEnforcement ./...
							 | 
						|
								
							 | 
						|
								test-presigned: ## Test only presigned URL integration
							 | 
						|
									go test -v -run TestS3IAMPresignedURLIntegration ./...
							 | 
						|
								
							 | 
						|
								# Performance testing
							 | 
						|
								benchmark: setup start-services wait-for-services ## Run performance benchmarks
							 | 
						|
									@echo "🏁 Running IAM performance benchmarks..."
							 | 
						|
									go test -bench=. -benchmem -timeout $(TEST_TIMEOUT) ./...
							 | 
						|
									@make stop-services
							 | 
						|
								
							 | 
						|
								# Continuous integration
							 | 
						|
								ci: ## Run tests suitable for CI environment
							 | 
						|
									@echo "🔄 Running CI tests..."
							 | 
						|
									@export CGO_ENABLED=0; make test
							 | 
						|
								
							 | 
						|
								# Development helpers
							 | 
						|
								watch: ## Watch for file changes and re-run tests
							 | 
						|
									@echo "👀 Watching for changes..."
							 | 
						|
									@command -v entr >/dev/null 2>&1 || (echo "entr is required for watch mode. Install with: brew install entr" && exit 1)
							 | 
						|
									@find . -name "*.go" | entr -r make test-quick
							 | 
						|
								
							 | 
						|
								install-deps: ## Install test dependencies
							 | 
						|
									@echo "📦 Installing test dependencies..."
							 | 
						|
									go mod tidy
							 | 
						|
									go get -u github.com/stretchr/testify
							 | 
						|
									go get -u github.com/aws/aws-sdk-go
							 | 
						|
									go get -u github.com/golang-jwt/jwt/v5
							 | 
						|
								
							 | 
						|
								# Docker support
							 | 
						|
								docker-test-legacy: ## Run tests in Docker container (legacy)
							 | 
						|
									@echo "🐳 Running tests in Docker..."
							 | 
						|
									docker build -f Dockerfile.test -t seaweedfs-s3-iam-test .
							 | 
						|
									docker run --rm -v $(PWD)/../../../:/app seaweedfs-s3-iam-test
							 | 
						|
								
							 | 
						|
								# Docker Compose support with Keycloak
							 | 
						|
								docker-up: ## Start all services with Docker Compose (including Keycloak)
							 | 
						|
									@echo "🐳 Starting services with Docker Compose including Keycloak..."
							 | 
						|
									@docker compose up -d
							 | 
						|
									@echo "⏳ Waiting for services to be healthy..."
							 | 
						|
									@sleep 30
							 | 
						|
									@echo "✅ Services should be ready"
							 | 
						|
								
							 | 
						|
								docker-down: ## Stop all Docker Compose services
							 | 
						|
									@echo "🐳 Stopping Docker Compose services..."
							 | 
						|
									@docker compose down -v
							 | 
						|
									@echo "✅ All services stopped"
							 | 
						|
								
							 | 
						|
								docker-logs: ## Show logs from all services
							 | 
						|
									@docker compose logs -f
							 | 
						|
								
							 | 
						|
								docker-test: docker-up ## Run tests with Docker Compose including Keycloak
							 | 
						|
									@echo "🧪 Running Keycloak integration tests..."
							 | 
						|
									@export KEYCLOAK_URL="http://localhost:8080" && \
							 | 
						|
									 export S3_ENDPOINT="http://localhost:8333" && \
							 | 
						|
									 sleep 10 && \
							 | 
						|
									 go test -v -timeout $(TEST_TIMEOUT) -run "TestKeycloak" ./...
							 | 
						|
									@echo "🐳 Stopping services after tests..."
							 | 
						|
									@make docker-down
							 | 
						|
								
							 | 
						|
								docker-build: ## Build custom SeaweedFS image for Docker tests
							 | 
						|
									@echo "🏗️ Building custom SeaweedFS image..."
							 | 
						|
									@docker build -f Dockerfile.s3 -t seaweedfs-iam:latest ../../..
							 | 
						|
									@echo "✅ Image built successfully"
							 | 
						|
								
							 | 
						|
								# All PHONY targets
							 | 
						|
								.PHONY: test test-quick run-tests setup start-services stop-services wait-for-services clean logs status debug
							 | 
						|
								.PHONY: test-auth test-policy test-expiration test-multipart test-bucket-policy test-context test-presigned  
							 | 
						|
								.PHONY: benchmark ci watch install-deps docker-test docker-up docker-down docker-logs docker-build
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								# New test targets for previously skipped tests
							 | 
						|
								
							 | 
						|
								test-distributed: ## Run distributed IAM tests
							 | 
						|
									@echo "🌐 Running distributed IAM tests..."
							 | 
						|
									@export ENABLE_DISTRIBUTED_TESTS=true && go test -v -timeout $(TEST_TIMEOUT) -run "TestS3IAMDistributedTests" ./...
							 | 
						|
								
							 | 
						|
								test-performance: ## Run performance tests
							 | 
						|
									@echo "🏁 Running performance tests..."
							 | 
						|
									@export ENABLE_PERFORMANCE_TESTS=true && go test -v -timeout $(TEST_TIMEOUT) -run "TestS3IAMPerformanceTests" ./...
							 | 
						|
								
							 | 
						|
								test-stress: ## Run stress tests
							 | 
						|
									@echo "💪 Running stress tests..."
							 | 
						|
									@export ENABLE_STRESS_TESTS=true && ./run_stress_tests.sh
							 | 
						|
								
							 | 
						|
								test-versioning-stress: ## Run S3 versioning stress tests
							 | 
						|
									@echo "📚 Running versioning stress tests..."
							 | 
						|
									@cd ../versioning && ./enable_stress_tests.sh
							 | 
						|
								
							 | 
						|
								test-keycloak-full: docker-up ## Run complete Keycloak integration tests
							 | 
						|
									@echo "🔐 Running complete Keycloak integration tests..."
							 | 
						|
									@export KEYCLOAK_URL="http://localhost:8080" && \
							 | 
						|
									 export S3_ENDPOINT="http://localhost:8333" && \
							 | 
						|
									 sleep 15 && \
							 | 
						|
									 go test -v -timeout $(TEST_TIMEOUT) -run "TestKeycloak" ./...
							 | 
						|
									@make docker-down
							 | 
						|
								
							 | 
						|
								test-all-previously-skipped: ## Run all previously skipped tests
							 | 
						|
									@echo "🎯 Running all previously skipped tests..."
							 | 
						|
									@./run_all_tests.sh
							 | 
						|
								
							 | 
						|
								setup-all-tests: ## Setup environment for all tests (including Keycloak)
							 | 
						|
									@echo "🚀 Setting up complete test environment..."
							 | 
						|
									@./setup_all_tests.sh
							 | 
						|
								
							 | 
						|
								# Update help target
							 | 
						|
								help: ## Show this help message
							 | 
						|
									@echo "SeaweedFS S3 IAM Integration Tests"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "Usage:"
							 | 
						|
									@echo "  make [target]"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "Standard Targets:"
							 | 
						|
									@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "  %-25s %s\n", $$1, $$2}' $(MAKEFILE_LIST) | head -20
							 | 
						|
									@echo ""
							 | 
						|
									@echo "New Test Targets (Previously Skipped):"
							 | 
						|
									@echo "  test-distributed         Run distributed IAM tests"
							 | 
						|
									@echo "  test-performance         Run performance tests"
							 | 
						|
									@echo "  test-stress              Run stress tests"
							 | 
						|
									@echo "  test-versioning-stress   Run S3 versioning stress tests"
							 | 
						|
									@echo "  test-keycloak-full       Run complete Keycloak integration tests"
							 | 
						|
									@echo "  test-all-previously-skipped  Run all previously skipped tests"
							 | 
						|
									@echo "  setup-all-tests          Setup environment for all tests"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "Docker Compose Targets:"
							 | 
						|
									@echo "  docker-test              Run tests with Docker Compose including Keycloak"
							 | 
						|
									@echo "  docker-up                Start all services with Docker Compose"
							 | 
						|
									@echo "  docker-down              Stop all Docker Compose services"
							 | 
						|
									@echo "  docker-logs              Show logs from all services"
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								# New test targets for previously skipped tests
							 | 
						|
								
							 | 
						|
								test-distributed: ## Run distributed IAM tests
							 | 
						|
									@echo "🌐 Running distributed IAM tests..."
							 | 
						|
									@export ENABLE_DISTRIBUTED_TESTS=true && go test -v -timeout $(TEST_TIMEOUT) -run "TestS3IAMDistributedTests" ./...
							 | 
						|
								
							 | 
						|
								test-performance: ## Run performance tests
							 | 
						|
									@echo "🏁 Running performance tests..."
							 | 
						|
									@export ENABLE_PERFORMANCE_TESTS=true && go test -v -timeout $(TEST_TIMEOUT) -run "TestS3IAMPerformanceTests" ./...
							 | 
						|
								
							 | 
						|
								test-stress: ## Run stress tests
							 | 
						|
									@echo "💪 Running stress tests..."
							 | 
						|
									@export ENABLE_STRESS_TESTS=true && ./run_stress_tests.sh
							 | 
						|
								
							 | 
						|
								test-versioning-stress: ## Run S3 versioning stress tests
							 | 
						|
									@echo "📚 Running versioning stress tests..."
							 | 
						|
									@cd ../versioning && ./enable_stress_tests.sh
							 | 
						|
								
							 | 
						|
								test-keycloak-full: docker-up ## Run complete Keycloak integration tests
							 | 
						|
									@echo "🔐 Running complete Keycloak integration tests..."
							 | 
						|
									@export KEYCLOAK_URL="http://localhost:8080" && \
							 | 
						|
									 export S3_ENDPOINT="http://localhost:8333" && \
							 | 
						|
									 sleep 15 && \
							 | 
						|
									 go test -v -timeout $(TEST_TIMEOUT) -run "TestKeycloak" ./...
							 | 
						|
									@make docker-down
							 | 
						|
								
							 | 
						|
								test-all-previously-skipped: ## Run all previously skipped tests
							 | 
						|
									@echo "🎯 Running all previously skipped tests..."
							 | 
						|
									@./run_all_tests.sh
							 | 
						|
								
							 | 
						|
								setup-all-tests: ## Setup environment for all tests (including Keycloak)
							 | 
						|
									@echo "🚀 Setting up complete test environment..."
							 | 
						|
									@./setup_all_tests.sh
							 | 
						|
								
							 | 
						|
								# Update help target
							 | 
						|
								help: ## Show this help message
							 | 
						|
									@echo "SeaweedFS S3 IAM Integration Tests"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "Usage:"
							 | 
						|
									@echo "  make [target]"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "Standard Targets:"
							 | 
						|
									@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "  %-25s %s\n", $$1, $$2}' $(MAKEFILE_LIST) | head -20
							 | 
						|
									@echo ""
							 | 
						|
									@echo "New Test Targets (Previously Skipped):"
							 | 
						|
									@echo "  test-distributed         Run distributed IAM tests"
							 | 
						|
									@echo "  test-performance         Run performance tests"
							 | 
						|
									@echo "  test-stress              Run stress tests"
							 | 
						|
									@echo "  test-versioning-stress   Run S3 versioning stress tests"
							 | 
						|
									@echo "  test-keycloak-full       Run complete Keycloak integration tests"
							 | 
						|
									@echo "  test-all-previously-skipped  Run all previously skipped tests"
							 | 
						|
									@echo "  setup-all-tests          Setup environment for all tests"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "Docker Compose Targets:"
							 | 
						|
									@echo "  docker-test              Run tests with Docker Compose including Keycloak"
							 | 
						|
									@echo "  docker-up                Start all services with Docker Compose"
							 | 
						|
									@echo "  docker-down              Stop all Docker Compose services"
							 | 
						|
									@echo "  docker-logs              Show logs from all services"
							 | 
						|
								
							 |