Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 46 additions & 76 deletions test-server/Makefile
Original file line number Diff line number Diff line change
@@ -1,72 +1,38 @@
# 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

# 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:
Expand All @@ -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"

Expand All @@ -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
25 changes: 25 additions & 0 deletions test-server/go-v3-server/Makefile
Original file line number Diff line number Diff line change
@@ -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)
24 changes: 24 additions & 0 deletions test-server/java-v3-server/Makefile
Original file line number Diff line number Diff line change
@@ -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)
28 changes: 28 additions & 0 deletions test-server/python-v3-server/Makefile
Original file line number Diff line number Diff line change
@@ -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)