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.
		
		
		
		
		
			
		
			
				
					
					
						
							337 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							337 lines
						
					
					
						
							12 KiB
						
					
					
				
								# CORS Integration Tests Makefile
							 | 
						|
								# This Makefile provides comprehensive targets for running CORS integration tests
							 | 
						|
								
							 | 
						|
								.PHONY: help build-weed setup-server start-server stop-server test-cors test-cors-quick test-cors-comprehensive test-all clean logs check-deps
							 | 
						|
								
							 | 
						|
								# Configuration
							 | 
						|
								WEED_BINARY := ../../../weed/weed_binary
							 | 
						|
								S3_PORT := 8333
							 | 
						|
								MASTER_PORT := 9333
							 | 
						|
								VOLUME_PORT := 8080
							 | 
						|
								FILER_PORT := 8888
							 | 
						|
								TEST_TIMEOUT := 10m
							 | 
						|
								TEST_PATTERN := TestCORS
							 | 
						|
								
							 | 
						|
								# Default target
							 | 
						|
								help:
							 | 
						|
									@echo "CORS Integration Tests Makefile"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "Available targets:"
							 | 
						|
									@echo "  help                       - Show this help message"
							 | 
						|
									@echo "  build-weed                - Build the SeaweedFS binary"
							 | 
						|
									@echo "  check-deps                - Check dependencies and build binary if needed"
							 | 
						|
									@echo "  start-server              - Start SeaweedFS server for testing"
							 | 
						|
									@echo "  start-server-simple       - Start server without process cleanup (for CI)"
							 | 
						|
									@echo "  stop-server               - Stop SeaweedFS server"
							 | 
						|
									@echo "  test-cors                 - Run all CORS tests"
							 | 
						|
									@echo "  test-cors-quick           - Run core CORS tests only"
							 | 
						|
									@echo "  test-cors-simple          - Run tests without server management"
							 | 
						|
									@echo "  test-cors-comprehensive   - Run comprehensive CORS tests"
							 | 
						|
									@echo "  test-with-server          - Start server, run tests, stop server"
							 | 
						|
									@echo "  logs                      - Show server logs"
							 | 
						|
									@echo "  clean                     - Clean up test artifacts and stop server"
							 | 
						|
									@echo "  health-check              - Check if server is accessible"
							 | 
						|
									@echo ""
							 | 
						|
									@echo "Configuration:"
							 | 
						|
									@echo "  S3_PORT=${S3_PORT}"
							 | 
						|
									@echo "  TEST_TIMEOUT=${TEST_TIMEOUT}"
							 | 
						|
								
							 | 
						|
								# Build the SeaweedFS binary
							 | 
						|
								build-weed:
							 | 
						|
									@echo "Building SeaweedFS binary..."
							 | 
						|
									@cd ../../../weed && go build -o weed_binary .
							 | 
						|
									@chmod +x $(WEED_BINARY)
							 | 
						|
									@echo "✅ SeaweedFS binary built at $(WEED_BINARY)"
							 | 
						|
								
							 | 
						|
								check-deps: build-weed
							 | 
						|
									@echo "Checking dependencies..."
							 | 
						|
									@echo "🔍 DEBUG: Checking Go installation..."
							 | 
						|
									@command -v go >/dev/null 2>&1 || (echo "Go is required but not installed" && exit 1)
							 | 
						|
									@echo "🔍 DEBUG: Go version: $$(go version)"
							 | 
						|
									@echo "🔍 DEBUG: Checking binary at $(WEED_BINARY)..."
							 | 
						|
									@test -f $(WEED_BINARY) || (echo "SeaweedFS binary not found at $(WEED_BINARY)" && exit 1)
							 | 
						|
									@echo "🔍 DEBUG: Binary size: $$(ls -lh $(WEED_BINARY) | awk '{print $$5}')"
							 | 
						|
									@echo "🔍 DEBUG: Binary permissions: $$(ls -la $(WEED_BINARY) | awk '{print $$1}')"
							 | 
						|
									@echo "🔍 DEBUG: Checking Go module dependencies..."
							 | 
						|
									@go list -m github.com/aws/aws-sdk-go-v2 >/dev/null 2>&1 || (echo "AWS SDK Go v2 not found. Run 'go mod tidy'." && exit 1)
							 | 
						|
									@go list -m github.com/stretchr/testify >/dev/null 2>&1 || (echo "Testify not found. Run 'go mod tidy'." && exit 1)
							 | 
						|
									@echo "✅ All dependencies are available"
							 | 
						|
								
							 | 
						|
								# Start SeaweedFS server for testing
							 | 
						|
								start-server: check-deps
							 | 
						|
									@echo "Starting SeaweedFS server..."
							 | 
						|
									@echo "🔍 DEBUG: Current working directory: $$(pwd)"
							 | 
						|
									@echo "🔍 DEBUG: Checking for existing weed processes..."
							 | 
						|
									@ps aux | grep weed | grep -v grep || echo "No existing weed processes found"
							 | 
						|
									@echo "🔍 DEBUG: Cleaning up any existing PID file..."
							 | 
						|
									@rm -f weed-server.pid
							 | 
						|
									@echo "🔍 DEBUG: Checking for port conflicts..."
							 | 
						|
									@if netstat -tlnp 2>/dev/null | grep $(S3_PORT) >/dev/null; then \
							 | 
						|
										echo "⚠️  Port $(S3_PORT) is already in use, trying to find the process..."; \
							 | 
						|
										netstat -tlnp 2>/dev/null | grep $(S3_PORT) || true; \
							 | 
						|
									else \
							 | 
						|
										echo "✅ Port $(S3_PORT) is available"; \
							 | 
						|
									fi
							 | 
						|
									@echo "🔍 DEBUG: Checking binary at $(WEED_BINARY)"
							 | 
						|
									@ls -la $(WEED_BINARY) || (echo "❌ Binary not found!" && exit 1)
							 | 
						|
									@echo "🔍 DEBUG: Checking config file at ../../../docker/compose/s3.json"
							 | 
						|
									@ls -la ../../../docker/compose/s3.json || echo "⚠️  Config file not found, continuing without it"
							 | 
						|
									@echo "🔍 DEBUG: Creating volume directory..."
							 | 
						|
									@mkdir -p ./test-volume-data
							 | 
						|
									@echo "🔍 DEBUG: Launching SeaweedFS server in background..."
							 | 
						|
									@echo "🔍 DEBUG: Command: $(WEED_BINARY) server -debug -s3 -s3.port=$(S3_PORT) -s3.allowEmptyFolder=false -s3.allowDeleteBucketNotEmpty=true -s3.config=../../../docker/compose/s3.json -filer -filer.maxMB=64 -master.volumeSizeLimitMB=50 -volume.max=100 -dir=./test-volume-data -volume.preStopSeconds=1 -metricsPort=9324"
							 | 
						|
									@$(WEED_BINARY) server \
							 | 
						|
										-debug \
							 | 
						|
										-s3 \
							 | 
						|
										-s3.port=$(S3_PORT) \
							 | 
						|
										-s3.allowEmptyFolder=false \
							 | 
						|
										-s3.allowDeleteBucketNotEmpty=true \
							 | 
						|
										-s3.config=../../../docker/compose/s3.json \
							 | 
						|
										-filer \
							 | 
						|
										-filer.maxMB=64 \
							 | 
						|
										-master.volumeSizeLimitMB=50 \
							 | 
						|
										-volume.max=100 \
							 | 
						|
										-dir=./test-volume-data \
							 | 
						|
										-volume.preStopSeconds=1 \
							 | 
						|
										-metricsPort=9324 \
							 | 
						|
										> weed-test.log 2>&1 & echo $$! > weed-server.pid
							 | 
						|
									@echo "🔍 DEBUG: Server PID: $$(cat weed-server.pid 2>/dev/null || echo 'PID file not found')"
							 | 
						|
									@echo "🔍 DEBUG: Checking if PID is still running..."
							 | 
						|
									@sleep 2
							 | 
						|
									@if [ -f weed-server.pid ]; then \
							 | 
						|
										SERVER_PID=$$(cat weed-server.pid); \
							 | 
						|
										ps -p $$SERVER_PID || echo "⚠️  Server PID $$SERVER_PID not found after 2 seconds"; \
							 | 
						|
									else \
							 | 
						|
										echo "⚠️  PID file not found"; \
							 | 
						|
									fi
							 | 
						|
									@echo "🔍 DEBUG: Waiting for server to start (up to 90 seconds)..."
							 | 
						|
									@for i in $$(seq 1 90); do \
							 | 
						|
										echo "🔍 DEBUG: Attempt $$i/90 - checking port $(S3_PORT)"; \
							 | 
						|
										if curl -s http://localhost:$(S3_PORT) >/dev/null 2>&1; then \
							 | 
						|
											echo "✅ SeaweedFS server started successfully on port $(S3_PORT) after $$i seconds"; \
							 | 
						|
											exit 0; \
							 | 
						|
										fi; \
							 | 
						|
										if [ $$i -eq 5 ]; then \
							 | 
						|
											echo "🔍 DEBUG: After 5 seconds, checking process and logs..."; \
							 | 
						|
											ps aux | grep weed | grep -v grep || echo "No weed processes found"; \
							 | 
						|
											if [ -f weed-test.log ]; then \
							 | 
						|
												echo "=== First server logs ==="; \
							 | 
						|
												head -20 weed-test.log; \
							 | 
						|
											fi; \
							 | 
						|
										fi; \
							 | 
						|
										if [ $$i -eq 15 ]; then \
							 | 
						|
											echo "🔍 DEBUG: After 15 seconds, checking port bindings..."; \
							 | 
						|
											netstat -tlnp 2>/dev/null | grep $(S3_PORT) || echo "Port $(S3_PORT) not bound"; \
							 | 
						|
											netstat -tlnp 2>/dev/null | grep 9333 || echo "Port 9333 not bound"; \
							 | 
						|
											netstat -tlnp 2>/dev/null | grep 8080 || echo "Port 8080 not bound"; \
							 | 
						|
										fi; \
							 | 
						|
										if [ $$i -eq 30 ]; then \
							 | 
						|
											echo "⚠️  Server taking longer than expected (30s), checking logs..."; \
							 | 
						|
											if [ -f weed-test.log ]; then \
							 | 
						|
												echo "=== Recent server logs ==="; \
							 | 
						|
												tail -20 weed-test.log; \
							 | 
						|
											fi; \
							 | 
						|
										fi; \
							 | 
						|
										sleep 1; \
							 | 
						|
									done; \
							 | 
						|
									echo "❌ Server failed to start within 90 seconds"; \
							 | 
						|
									echo "🔍 DEBUG: Final process check:"; \
							 | 
						|
									ps aux | grep weed | grep -v grep || echo "No weed processes found"; \
							 | 
						|
									echo "🔍 DEBUG: Final port check:"; \
							 | 
						|
									netstat -tlnp 2>/dev/null | grep -E "(8333|9333|8080)" || echo "No ports bound"; \
							 | 
						|
									echo "=== Full server logs ==="; \
							 | 
						|
									if [ -f weed-test.log ]; then \
							 | 
						|
										cat weed-test.log; \
							 | 
						|
									else \
							 | 
						|
										echo "No log file found"; \
							 | 
						|
									fi; \
							 | 
						|
									exit 1
							 | 
						|
								
							 | 
						|
								# Stop SeaweedFS server
							 | 
						|
								stop-server:
							 | 
						|
									@echo "Stopping SeaweedFS server..."
							 | 
						|
									@if [ -f weed-server.pid ]; then \
							 | 
						|
										SERVER_PID=$$(cat weed-server.pid); \
							 | 
						|
										echo "Killing server PID $$SERVER_PID"; \
							 | 
						|
										if ps -p $$SERVER_PID >/dev/null 2>&1; then \
							 | 
						|
											kill -TERM $$SERVER_PID 2>/dev/null || true; \
							 | 
						|
											sleep 2; \
							 | 
						|
											if ps -p $$SERVER_PID >/dev/null 2>&1; then \
							 | 
						|
												echo "Process still running, sending KILL signal..."; \
							 | 
						|
												kill -KILL $$SERVER_PID 2>/dev/null || true; \
							 | 
						|
												sleep 1; \
							 | 
						|
											fi; \
							 | 
						|
										else \
							 | 
						|
											echo "Process $$SERVER_PID not found (already stopped)"; \
							 | 
						|
										fi; \
							 | 
						|
										rm -f weed-server.pid; \
							 | 
						|
									else \
							 | 
						|
										echo "No PID file found, checking for running processes..."; \
							 | 
						|
										echo "⚠️  Skipping automatic process cleanup to avoid CI issues"; \
							 | 
						|
										echo "Note: Any remaining weed processes should be cleaned up by the CI environment"; \
							 | 
						|
									fi
							 | 
						|
									@echo "✅ SeaweedFS server stopped"
							 | 
						|
								
							 | 
						|
								# Show server logs
							 | 
						|
								logs:
							 | 
						|
									@if test -f weed-test.log; then \
							 | 
						|
										echo "=== SeaweedFS Server Logs ==="; \
							 | 
						|
										tail -f weed-test.log; \
							 | 
						|
									else \
							 | 
						|
										echo "No log file found. Server may not be running."; \
							 | 
						|
									fi
							 | 
						|
								
							 | 
						|
								# Core CORS tests (basic functionality)
							 | 
						|
								test-cors-quick: check-deps
							 | 
						|
									@echo "Running core CORS tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSConfigurationManagement|TestCORSPreflightRequest|TestCORSActualRequest" .
							 | 
						|
									@echo "✅ Core CORS tests completed"
							 | 
						|
								
							 | 
						|
								# All CORS tests (comprehensive)
							 | 
						|
								test-cors: check-deps
							 | 
						|
									@echo "Running all CORS tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "$(TEST_PATTERN)" .
							 | 
						|
									@echo "✅ All CORS tests completed"
							 | 
						|
								
							 | 
						|
								# Comprehensive CORS tests (all features)
							 | 
						|
								test-cors-comprehensive: check-deps
							 | 
						|
									@echo "Running comprehensive CORS tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORS" .
							 | 
						|
									@echo "✅ Comprehensive CORS tests completed"
							 | 
						|
								
							 | 
						|
								# All tests without server management
							 | 
						|
								test-cors-simple: check-deps
							 | 
						|
									@echo "Running CORS tests (assuming server is already running)..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) .
							 | 
						|
									@echo "✅ All CORS tests completed"
							 | 
						|
								
							 | 
						|
								# Start server, run tests, stop server
							 | 
						|
								test-with-server: start-server
							 | 
						|
									@echo "Running CORS tests with managed server..."
							 | 
						|
									@sleep 5  # Give server time to fully start
							 | 
						|
									@make test-cors-comprehensive || (echo "Tests failed, stopping server..." && make stop-server && exit 1)
							 | 
						|
									@make stop-server
							 | 
						|
									@echo "✅ All tests completed with managed server"
							 | 
						|
								
							 | 
						|
								# Health check
							 | 
						|
								health-check:
							 | 
						|
									@echo "Checking server health..."
							 | 
						|
									@if curl -s http://localhost:$(S3_PORT) >/dev/null 2>&1; then \
							 | 
						|
										echo "✅ Server is accessible on port $(S3_PORT)"; \
							 | 
						|
									else \
							 | 
						|
										echo "❌ Server is not accessible on port $(S3_PORT)"; \
							 | 
						|
										exit 1; \
							 | 
						|
									fi
							 | 
						|
								
							 | 
						|
								# Clean up
							 | 
						|
								clean:
							 | 
						|
									@echo "Cleaning up test artifacts..."
							 | 
						|
									@make stop-server
							 | 
						|
									@rm -f weed-test.log
							 | 
						|
									@rm -f weed-server.pid
							 | 
						|
									@rm -rf ./test-volume-data
							 | 
						|
									@rm -f cors.test
							 | 
						|
									@go clean -testcache
							 | 
						|
									@echo "✅ Cleanup completed"
							 | 
						|
								
							 | 
						|
								# Individual test targets for specific functionality
							 | 
						|
								test-basic-cors:
							 | 
						|
									@echo "Running basic CORS tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSConfigurationManagement" .
							 | 
						|
								
							 | 
						|
								test-preflight-cors:
							 | 
						|
									@echo "Running preflight CORS tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSPreflightRequest" .
							 | 
						|
								
							 | 
						|
								test-actual-cors:
							 | 
						|
									@echo "Running actual CORS request tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSActualRequest" .
							 | 
						|
								
							 | 
						|
								test-origin-matching:
							 | 
						|
									@echo "Running origin matching tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSOriginMatching" .
							 | 
						|
								
							 | 
						|
								test-header-matching:
							 | 
						|
									@echo "Running header matching tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSHeaderMatching" .
							 | 
						|
								
							 | 
						|
								test-method-matching:
							 | 
						|
									@echo "Running method matching tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSMethodMatching" .
							 | 
						|
								
							 | 
						|
								test-multiple-rules:
							 | 
						|
									@echo "Running multiple rules tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSMultipleRulesMatching" .
							 | 
						|
								
							 | 
						|
								test-validation:
							 | 
						|
									@echo "Running validation tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSValidation" .
							 | 
						|
								
							 | 
						|
								test-caching:
							 | 
						|
									@echo "Running caching tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSCaching" .
							 | 
						|
								
							 | 
						|
								test-error-handling:
							 | 
						|
									@echo "Running error handling tests..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSErrorHandling" .
							 | 
						|
								
							 | 
						|
								# Development targets
							 | 
						|
								dev-start: start-server
							 | 
						|
									@echo "Development server started. Access S3 API at http://localhost:$(S3_PORT)"
							 | 
						|
									@echo "To stop: make stop-server"
							 | 
						|
								
							 | 
						|
								dev-test: check-deps
							 | 
						|
									@echo "Running tests in development mode..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -run "TestCORSConfigurationManagement" .
							 | 
						|
								
							 | 
						|
								# CI targets
							 | 
						|
								ci-test: check-deps
							 | 
						|
									@echo "Running tests in CI mode..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -race .
							 | 
						|
								
							 | 
						|
								# All targets
							 | 
						|
								test-all: test-cors test-cors-comprehensive
							 | 
						|
									@echo "✅ All CORS tests completed"
							 | 
						|
								
							 | 
						|
								# Benchmark targets
							 | 
						|
								benchmark-cors:
							 | 
						|
									@echo "Running CORS performance benchmarks..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -bench=. -benchmem .
							 | 
						|
								
							 | 
						|
								# Coverage targets
							 | 
						|
								coverage:
							 | 
						|
									@echo "Running tests with coverage..."
							 | 
						|
									@go test -v -timeout=$(TEST_TIMEOUT) -coverprofile=coverage.out .
							 | 
						|
									@go tool cover -html=coverage.out -o coverage.html
							 | 
						|
									@echo "Coverage report generated: coverage.html"
							 | 
						|
								
							 | 
						|
								# Format and lint
							 | 
						|
								fmt:
							 | 
						|
									@echo "Formatting Go code..."
							 | 
						|
									@go fmt .
							 | 
						|
								
							 | 
						|
								lint:
							 | 
						|
									@echo "Running linter..."
							 | 
						|
									@golint . || echo "golint not available, skipping..."
							 | 
						|
								
							 | 
						|
								# Install dependencies for development
							 | 
						|
								install-deps:
							 | 
						|
									@echo "Installing Go dependencies..."
							 | 
						|
									@go mod tidy
							 | 
						|
									@go mod download
							 | 
						|
								
							 | 
						|
								# Show current configuration
							 | 
						|
								show-config:
							 | 
						|
									@echo "Current configuration:"
							 | 
						|
									@echo "  WEED_BINARY: $(WEED_BINARY)"
							 | 
						|
									@echo "  S3_PORT: $(S3_PORT)"
							 | 
						|
									@echo "  TEST_TIMEOUT: $(TEST_TIMEOUT)"
							 | 
						|
									@echo "  TEST_PATTERN: $(TEST_PATTERN)"
							 | 
						|
								
							 | 
						|
								# Legacy targets for backward compatibility
							 | 
						|
								test: test-with-server
							 | 
						|
								test-verbose: test-cors-comprehensive
							 | 
						|
								test-single: test-basic-cors
							 | 
						|
								test-clean: clean
							 | 
						|
								build: check-deps
							 | 
						|
								setup: check-deps 
							 |