diff --git a/test-server/Makefile b/test-server/Makefile index 4831d68d..90d15648 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -1,6 +1,6 @@ # Makefile for S3 Encryption Client Testing -.PHONY: all start-servers start-python-v3-server start-java-v3-server start-go-v3-server run-tests stop-servers clean ci check-env help +.PHONY: all start-servers run-tests stop-servers clean ci check-env help # Default target all: start-servers run-tests @@ -8,65 +8,31 @@ all: start-servers run-tests # CI target for GitHub Actions ci: start-servers run-tests stop-servers +SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./||' | sort) -# Start Python server in background -start-python-v3-server: - @echo "Starting Python V3 server..." - cd python-v3-server && \ - python -m venv .venv && \ - .venv/bin/python -m ensurepip && \ - .venv/bin/python -m pip install -e . && \ - .venv/bin/python -m pip install -e ../.. && \ - AWS_ACCESS_KEY_ID="$$AWS_ACCESS_KEY_ID" \ - AWS_SECRET_ACCESS_KEY="$$AWS_SECRET_ACCESS_KEY" \ - AWS_SESSION_TOKEN="$$AWS_SESSION_TOKEN" \ - AWS_REGION="us-west-2" \ - .venv/bin/python src/main.py & echo $$! > ../python-v3-server.pid - @echo "Python server starting..." - -# Start Java server in background -start-java-v3-server: - @echo "Starting Java V3 server..." - cd java-v3-server && \ - AWS_ACCESS_KEY_ID="$$AWS_ACCESS_KEY_ID" \ - AWS_SECRET_ACCESS_KEY="$$AWS_SECRET_ACCESS_KEY" \ - AWS_SESSION_TOKEN="$$AWS_SESSION_TOKEN" \ - AWS_REGION="us-west-2" \ - ./gradlew --build-cache --parallel run & echo $$! > ../java-v3-server.pid - @echo "Java server starting..." - -# Start Go server in background -start-go-v3-server: - @echo "Starting Go V3 server..." - cd go-v3-server && \ - go mod tidy && \ - AWS_ACCESS_KEY_ID="$$AWS_ACCESS_KEY_ID" \ - AWS_SECRET_ACCESS_KEY="$$AWS_SECRET_ACCESS_KEY" \ - AWS_SESSION_TOKEN="$$AWS_SESSION_TOKEN" \ - AWS_REGION="us-west-2" \ - go run . & echo $$! > ../go-v3-server.pid - @echo "Go server starting..." +SERVER_TARGETS := $(addprefix start-, $(SERVER_DIRS)) # Start all servers in parallel start-servers: - @echo "Starting servers in parallel..." - @$(MAKE) -j3 start-python-v3-server start-java-v3-server start-go-v3-server - @echo "Waiting for servers to be ready..." - @for i in $$(seq 1 360); do \ - if nc -z localhost 8080 && nc -z localhost 8081 && nc -z localhost 8082; then \ - echo "Ports are open, waiting for servers to initialize..."; \ - sleep 5; \ - echo "All servers are ready!"; \ - break; \ - fi; \ - if [ $$i -eq 360 ]; then \ - echo "Timeout waiting for servers to start"; \ - exit 1; \ - fi; \ - echo "Waiting for servers to start ($$i/360)..."; \ - sleep 1; \ + @echo "Starting all servers..." + $(MAKE) start-all-servers + @echo "Waiting for servers to start..." + @for dir in $(SERVER_DIRS); do \ + echo "Waiting for server in $$dir..."; \ + $(MAKE) -C $$dir wait-for-server; \ done +start-all-servers: $(SERVER_TARGETS) + +$(SERVER_TARGETS): start-%: + @if [ -f $*/Makefile ]; then \ + echo "Starting server in $*..."; \ + $(MAKE) -C $* start-server; \ + else \ + echo "❌ Error: no Makefile found in $$dir"; \ + exit 1; \ + fi; \ + # Run the Java tests run-tests: @@ -84,38 +50,20 @@ run-tests: # Stop the servers stop-servers: @echo "Stopping servers..." - @if [ -f python-v3-server.pid ]; then \ - kill $$(cat python-v3-server.pid) 2>/dev/null || true; \ - rm python-v3-server.pid; \ - fi - @if [ -f java-v3-server.pid ]; then \ - kill $$(cat java-v3-server.pid) 2>/dev/null || true; \ - rm java-v3-server.pid; \ - fi - @if [ -f go-v3-server.pid ]; then \ - kill $$(cat go-v3-server.pid) 2>/dev/null || true; \ - rm go-v3-server.pid; \ - fi + @for dir in $(SERVER_DIRS); do \ + echo "Starting server in $$dir..."; \ + $(MAKE) -C $$dir stop-server; \ + done @echo "Servers stopped" -# Clean up logs and pid files -clean: stop-servers - @echo "Cleaning up..." - @rm -f python-v3-server.log java-v3-server.log go-v3-server.log - @echo "Cleanup complete" - # Help target help: @echo "Available targets:" @echo " all : Start servers and run tests (default, output to stdout)" @echo " ci : Run in CI mode (start servers, run tests, stop servers)" @echo " start-servers : Start all servers in parallel" - @echo " start-python-v3-server : Start only the Python V3 server" - @echo " start-java-v3-server : Start only the Java V3 server" - @echo " start-go-v3-server : Start only the Go V3 server" @echo " run-tests : Run Java tests" @echo " stop-servers : Stop running servers" - @echo " clean : Stop servers and clean up logs" @echo " check-env : Check if required environment variables are set" @echo " help : Show this help message" @@ -126,3 +74,25 @@ check-env: @if [ -z "$$AWS_SECRET_ACCESS_KEY" ]; then echo "AWS_SECRET_ACCESS_KEY is not set"; else echo "AWS_SECRET_ACCESS_KEY is set"; fi @if [ -z "$$AWS_SESSION_TOKEN" ]; then echo "AWS_SESSION_TOKEN is not set"; else echo "AWS_SESSION_TOKEN is set"; fi @if [ -z "$$AWS_REGION" ]; then echo "AWS_REGION is not set (will use us-west-2 as default)"; else echo "AWS_REGION is set to $$AWS_REGION"; fi + +TIMEOUT := 360 + +wait-for-port: + @if [ -z "$(PORT)" ]; then \ + echo "❌ Error: PORT is required"; \ + exit 1; \ + fi + @for i in $$(seq 1 $(TIMEOUT)); do \ + if nc -z localhost $$PORT; then \ + echo "Ports are open, waiting for servers to initialize..."; \ + sleep 5; \ + echo "Server at $$PORT is ready!"; \ + break; \ + fi; \ + if [ $$i -eq $(TIMEOUT) ]; then \ + echo "Timeout waiting for $$PORT start"; \ + exit 1; \ + fi; \ + echo "Waiting for $$PORT to start ($$i/$(TIMEOUT))..."; \ + sleep 1; \ + done diff --git a/test-server/go-v3-server/Makefile b/test-server/go-v3-server/Makefile new file mode 100644 index 00000000..0ab142de --- /dev/null +++ b/test-server/go-v3-server/Makefile @@ -0,0 +1,25 @@ +# Makefile for S3 Encryption Client Testing + +.PHONY: start-server stop-server wait-for-server + +PID_FILE := server.pid +PORT := 8082 + +start-server: + @echo "Starting Go V3 server..." + go mod tidy + AWS_ACCESS_KEY_ID="$$AWS_ACCESS_KEY_ID" \ + AWS_SECRET_ACCESS_KEY="$$AWS_SECRET_ACCESS_KEY" \ + AWS_SESSION_TOKEN="$$AWS_SESSION_TOKEN" \ + AWS_REGION="us-west-2" \ + go run . & echo $$! > $(PID_FILE) + @echo "Go V3 server starting..." + +stop-server: + @if [ -f $(PID_FILE) ]; then \ + kill $$(cat $(PID_FILE)) 2>/dev/null || true; \ + rm $(PID_FILE); \ + fi + +wait-for-server: + $(MAKE) -C .. wait-for-port PORT=$(PORT) diff --git a/test-server/java-v3-server/Makefile b/test-server/java-v3-server/Makefile new file mode 100644 index 00000000..1e0dc763 --- /dev/null +++ b/test-server/java-v3-server/Makefile @@ -0,0 +1,24 @@ +# Makefile for S3 Encryption Client Testing + +.PHONY: start-server stop-server wait-for-server + +PID_FILE := server.pid +PORT := 8080 + +start-server: + @echo "Starting Java V3 server..." + AWS_ACCESS_KEY_ID="$$AWS_ACCESS_KEY_ID" \ + AWS_SECRET_ACCESS_KEY="$$AWS_SECRET_ACCESS_KEY" \ + AWS_SESSION_TOKEN="$$AWS_SESSION_TOKEN" \ + AWS_REGION="us-west-2" \ + ./gradlew --build-cache --parallel run & echo $$! > $(PID_FILE) + @echo "Java V3 server starting..." + +stop-server: + @if [ -f $(PID_FILE) ]; then \ + kill $$(cat $(PID_FILE)) 2>/dev/null || true; \ + rm $(PID_FILE); \ + fi + +wait-for-server: + $(MAKE) -C .. wait-for-port PORT=$(PORT) diff --git a/test-server/python-v3-server/Makefile b/test-server/python-v3-server/Makefile new file mode 100644 index 00000000..e6e9d509 --- /dev/null +++ b/test-server/python-v3-server/Makefile @@ -0,0 +1,28 @@ +# Makefile for S3 Encryption Client Testing + +.PHONY: start-server stop-server wait-for-server + +PID_FILE := server.pid +PORT := 8081 + +start-server: + @echo "Starting Python V3 server..." + python -m venv .venv + .venv/bin/python -m ensurepip + .venv/bin/python -m pip install -e . + .venv/bin/python -m pip install -e ../.. + AWS_ACCESS_KEY_ID="$$AWS_ACCESS_KEY_ID" \ + AWS_SECRET_ACCESS_KEY="$$AWS_SECRET_ACCESS_KEY" \ + AWS_SESSION_TOKEN="$$AWS_SESSION_TOKEN" \ + AWS_REGION="us-west-2" \ + .venv/bin/python src/main.py & echo $$! > $(PID_FILE) + @echo "Python V3 server starting..." + +stop-server: + @if [ -f $(PID_FILE) ]; then \ + kill $$(cat $(PID_FILE)) 2>/dev/null || true; \ + rm $(PID_FILE); \ + fi + +wait-for-server: + $(MAKE) -C .. wait-for-port PORT=$(PORT)