From 967ab16efc60ac28bc35c0af7b5a1946ff4733c0 Mon Sep 17 00:00:00 2001 From: Ryan Emery Date: Wed, 17 Sep 2025 21:48:39 -0700 Subject: [PATCH 1/5] Break up the makefiles --- test-server/Makefile | 116 +++++++++----------------- test-server/go-v3-server/Makefile | 25 ++++++ test-server/java-v3-server/Makefile | 24 ++++++ test-server/python-v3-server/Makefile | 28 +++++++ 4 files changed, 118 insertions(+), 75 deletions(-) create mode 100644 test-server/go-v3-server/Makefile create mode 100644 test-server/java-v3-server/Makefile create mode 100644 test-server/python-v3-server/Makefile diff --git a/test-server/Makefile b/test-server/Makefile index 4831d68d..db1899e4 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,63 +8,27 @@ all: start-servers run-tests # CI target for GitHub Actions ci: start-servers run-tests stop-servers - -# 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_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./||' | sort) # 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; \ + @echo "Starting all servers..." + @for dir in $(SERVER_DIRS); do \ + if [ -f $$dir/Makefile ]; then \ + echo "Starting server in $$dir..."; \ + $(MAKE) -C $$dir start-server; \ + else \ + echo "Skipping $$dir (no Makefile found)"; \ fi; \ - if [ $$i -eq 360 ]; then \ - echo "Timeout waiting for servers to start"; \ - exit 1; \ + done; + @echo "Waiting for servers to start..." + @for dir in $(SERVER_DIRS); do \ + if [ -f $$dir/Makefile ]; then \ + echo "Starting server in $$dir..."; \ + $(MAKE) -C $$dir wait-for-server; \ + else \ + echo "Skipping $$dir (no Makefile found)"; \ fi; \ - echo "Waiting for servers to start ($$i/360)..."; \ - sleep 1; \ done @@ -84,38 +48,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 +72,23 @@ 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 + +wait-for-port: + @if [ -z "$(PORT)" ]; then \ + echo "❌ Error: PORT is required"; \ + exit 1; \ + fi + @for i in $$(seq 1 30); 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 30 ]; then \ + echo "Timeout waiting for $$PORT start"; \ + exit 1; \ + fi; \ + echo "Waiting for $$PORT to start ($$i/30)..."; \ + 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..db590bb0 --- /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 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..f5390aea --- /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 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..b8b78d20 --- /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 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) From 23f01a6f51f1ae6f9e9a92a29c382d83a75cf257 Mon Sep 17 00:00:00 2001 From: Ryan Emery Date: Wed, 17 Sep 2025 22:00:10 -0700 Subject: [PATCH 2/5] a little cleaner --- test-server/Makefile | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/test-server/Makefile b/test-server/Makefile index db1899e4..92bacf88 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -18,17 +18,14 @@ start-servers: echo "Starting server in $$dir..."; \ $(MAKE) -C $$dir start-server; \ else \ - echo "Skipping $$dir (no Makefile found)"; \ + echo "❌ Error: no Makefile found in $$dir"; \ + exit 1; \ fi; \ done; @echo "Waiting for servers to start..." @for dir in $(SERVER_DIRS); do \ - if [ -f $$dir/Makefile ]; then \ - echo "Starting server in $$dir..."; \ - $(MAKE) -C $$dir wait-for-server; \ - else \ - echo "Skipping $$dir (no Makefile found)"; \ - fi; \ + echo "Waiting for server in $$dir..."; \ + $(MAKE) -C $$dir wait-for-server; \ done @@ -73,22 +70,24 @@ check-env: @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 30); do \ + @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 30 ]; then \ + if [ $$i -eq $(TIMEOUT) ]; then \ echo "Timeout waiting for $$PORT start"; \ exit 1; \ fi; \ - echo "Waiting for $$PORT to start ($$i/30)..."; \ + echo "Waiting for $$PORT to start ($$i/$(TIMEOUT))..."; \ sleep 1; \ done From 85b628cd730ef4ac9646326d9f9b60e018b7b432 Mon Sep 17 00:00:00 2001 From: Ryan Emery Date: Wed, 17 Sep 2025 22:11:07 -0700 Subject: [PATCH 3/5] starting in parallel --- test-server/Makefile | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/test-server/Makefile b/test-server/Makefile index 92bacf88..90d15648 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -10,24 +10,29 @@ ci: start-servers run-tests stop-servers SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./||' | sort) +SERVER_TARGETS := $(addprefix start-, $(SERVER_DIRS)) + # Start all servers in parallel start-servers: @echo "Starting all servers..." - @for dir in $(SERVER_DIRS); do \ - if [ -f $$dir/Makefile ]; then \ - echo "Starting server in $$dir..."; \ - $(MAKE) -C $$dir start-server; \ - else \ - echo "❌ Error: no Makefile found in $$dir"; \ - exit 1; \ - fi; \ - done; + $(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: From 2e5f042b66bd035e3918165a6002e0f59d4a26f1 Mon Sep 17 00:00:00 2001 From: seebees Date: Thu, 18 Sep 2025 11:39:10 -0700 Subject: [PATCH 4/5] Update test-server/go-v3-server/Makefile Co-authored-by: Lucas McDonald --- test-server/go-v3-server/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-server/go-v3-server/Makefile b/test-server/go-v3-server/Makefile index db590bb0..0ab142de 100644 --- a/test-server/go-v3-server/Makefile +++ b/test-server/go-v3-server/Makefile @@ -13,7 +13,7 @@ start-server: AWS_SESSION_TOKEN="$$AWS_SESSION_TOKEN" \ AWS_REGION="us-west-2" \ go run . & echo $$! > $(PID_FILE) - @echo "Go server starting..." + @echo "Go V3 server starting..." stop-server: @if [ -f $(PID_FILE) ]; then \ From 48ce5c37efc47eb9d5c15771fc5be7a7ecc69c84 Mon Sep 17 00:00:00 2001 From: seebees Date: Thu, 18 Sep 2025 11:39:50 -0700 Subject: [PATCH 5/5] Apply suggestions from code review Co-authored-by: Lucas McDonald --- test-server/java-v3-server/Makefile | 2 +- test-server/python-v3-server/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test-server/java-v3-server/Makefile b/test-server/java-v3-server/Makefile index f5390aea..1e0dc763 100644 --- a/test-server/java-v3-server/Makefile +++ b/test-server/java-v3-server/Makefile @@ -12,7 +12,7 @@ start-server: AWS_SESSION_TOKEN="$$AWS_SESSION_TOKEN" \ AWS_REGION="us-west-2" \ ./gradlew --build-cache --parallel run & echo $$! > $(PID_FILE) - @echo "Java server starting..." + @echo "Java V3 server starting..." stop-server: @if [ -f $(PID_FILE) ]; then \ diff --git a/test-server/python-v3-server/Makefile b/test-server/python-v3-server/Makefile index b8b78d20..e6e9d509 100644 --- a/test-server/python-v3-server/Makefile +++ b/test-server/python-v3-server/Makefile @@ -16,7 +16,7 @@ start-server: AWS_SESSION_TOKEN="$$AWS_SESSION_TOKEN" \ AWS_REGION="us-west-2" \ .venv/bin/python src/main.py & echo $$! > $(PID_FILE) - @echo "Python server starting..." + @echo "Python V3 server starting..." stop-server: @if [ -f $(PID_FILE) ]; then \