Skip to content

Commit 7216147

Browse files
authored
chore: added make command for e2e (#813)
1 parent 4df7b26 commit 7216147

File tree

1 file changed

+176
-5
lines changed

1 file changed

+176
-5
lines changed

Makefile

Lines changed: 176 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,10 @@ Targets:
7979

8080
Runs various types of tests for the codebase.
8181

82-
- test-e2e Run end-to-end tests
83-
- test-orchestrator Run unit tests with coverage report
84-
- test Run all tests (e2e and unit)
82+
- test-orchestrator-e2e Run end-to-end orchestrator workflow tests
83+
- test-e2e Run end-to-end test
84+
- test-orchestrator Run unit tests with coverage report
85+
- test Run all tests (e2e and unit)
8586

8687
[ OTHER COMMANDS ]
8788

@@ -101,6 +102,11 @@ DOCKER_IMAGE := ghcr.io/madara-alliance/$(DOCKER_TAG)
101102
DOCKER_GZ := image.tar.gz
102103
ARTIFACTS := ./build-artifacts
103104

105+
# Configuration for E2E bridge tests
106+
CARGO_TARGET_DIR ?= target
107+
AWS_REGION ?= us-east-1
108+
PATHFINDER_URL_MAC = https://github.com/karnotxyz/pathfinder/releases/download/v0.13.2.1-no-charge-fee/pathfinder-aarch64-apple-darwin.tar.gz
109+
104110
# dim white italic
105111
DIM := \033[2;3;37m
106112

@@ -223,12 +229,177 @@ fmt:
223229
@cargo fmt
224230
@echo -e "$(PASS)Code formatting complete!$(RESET)"
225231

226-
.PHONY: test-e2e
227-
test-e2e:
232+
.PHONY: test-orchestrator-e2e
233+
test-orchestrator-e2e:
228234
@echo -e "$(DIM)Running E2E tests...$(RESET)"
229235
@RUST_LOG=info cargo nextest run --release --features testing --workspace test_orchestrator_workflow -E 'test(test_orchestrator_workflow)' --no-fail-fast
230236
@echo -e "$(PASS)E2E tests completed!$(RESET)"
231237

238+
# ============================================================================ #
239+
# E2E BRIDGE TESTS (MAC) #
240+
# ============================================================================ #
241+
242+
.PHONY: test-e2e
243+
test-e2e: check-e2e-env check-e2e-mac check-e2e-dependencies pull-e2e-docker-images build-e2e-binaries download-pathfinder-mac make-e2e-binaries-executable run-e2e clean-up-after-e2e
244+
@echo -e "$(PASS)E2E test completed!$(RESET)"
245+
246+
.PHONY: check-e2e-env
247+
check-e2e-env:
248+
@echo -e "$(DIM)Checking for MADARA_ORCHESTRATOR_ATLANTIC_API_KEY in .env.e2e...$(RESET)"
249+
@if [ ! -f .env.e2e ]; then \
250+
echo -e "$(WARN)⚠️ WARNING: .env.e2e file not found!$(RESET)"; \
251+
echo -e "$(WARN)⚠️ Please create .env.e2e and add MADARA_ORCHESTRATOR_ATLANTIC_API_KEY$(RESET)"; \
252+
echo -e "$(DIM)Press Enter to continue or Ctrl+C to cancel...$(RESET)"; \
253+
read -r; \
254+
elif ! grep -v "^[[:space:]]*#" .env.e2e | grep -q "MADARA_ORCHESTRATOR_ATLANTIC_API_KEY"; then \
255+
echo -e "$(WARN)⚠️ WARNING: MADARA_ORCHESTRATOR_ATLANTIC_API_KEY not found in .env.e2e$(RESET)"; \
256+
echo -e "$(WARN)⚠️ Please add MADARA_ORCHESTRATOR_ATLANTIC_API_KEY to .env.e2e$(RESET)"; \
257+
echo -e "$(DIM)Press Enter to continue or Ctrl+C to cancel...$(RESET)"; \
258+
read -r; \
259+
else \
260+
API_KEY=$$(grep -v "^[[:space:]]*#" .env.e2e | grep "MADARA_ORCHESTRATOR_ATLANTIC_API_KEY" | cut -d '=' -f 2 | tr -d ' "'); \
261+
if [ -z "$$API_KEY" ]; then \
262+
echo -e "$(WARN)⚠️ WARNING: MADARA_ORCHESTRATOR_ATLANTIC_API_KEY is empty in .env.e2e$(RESET)"; \
263+
echo -e "$(DIM)Press Enter to continue or Ctrl+C to cancel...$(RESET)"; \
264+
read -r; \
265+
else \
266+
MASKED_KEY=$$(echo $$API_KEY | sed 's/\(.\{4\}\).*/\1****/'); \
267+
echo -e "$(PASS)✅ Found MADARA_ORCHESTRATOR_ATLANTIC_API_KEY: $$MASKED_KEY$(RESET)"; \
268+
fi; \
269+
fi
270+
@# Check for CARGO_TARGET_DIR in .env.e2e
271+
@if [ -f .env.e2e ]; then \
272+
if grep -v "^[[:space:]]*#" .env.e2e | grep -q "CARGO_TARGET_DIR"; then \
273+
ENV_TARGET_DIR=$$(grep -v "^[[:space:]]*#" .env.e2e | grep "CARGO_TARGET_DIR" | cut -d '=' -f 2 | tr -d ' "'); \
274+
if [ "$$ENV_TARGET_DIR" != "$(CARGO_TARGET_DIR)" ]; then \
275+
echo -e "$(WARN)⚠️ WARNING: CARGO_TARGET_DIR in .env.e2e ($$ENV_TARGET_DIR) differs from Makefile value$(RESET)"; \
276+
echo -e "$(INFO)Updating .env.e2e to use: $(CARGO_TARGET_DIR)$(RESET)"; \
277+
sed -i.bak '/^[[:space:]]*CARGO_TARGET_DIR/d' .env.e2e && rm -f .env.e2e.bak; \
278+
echo "CARGO_TARGET_DIR=$(CARGO_TARGET_DIR)" >> .env.e2e; \
279+
else \
280+
echo -e "$(PASS)✅ CARGO_TARGET_DIR already set correctly: $(CARGO_TARGET_DIR)$(RESET)"; \
281+
fi; \
282+
else \
283+
echo -e "$(INFO)Adding CARGO_TARGET_DIR to .env.e2e: $(CARGO_TARGET_DIR)$(RESET)"; \
284+
echo "CARGO_TARGET_DIR=$(CARGO_TARGET_DIR)" >> .env.e2e; \
285+
fi; \
286+
fi
287+
288+
.PHONY: check-e2e-mac
289+
check-e2e-mac:
290+
@echo -e "$(DIM)Checking if running on Mac...$(RESET)"
291+
@if [ "$$(uname)" != "Darwin" ]; then \
292+
echo -e "$(WARN)❌ This test must be run on macOS$(RESET)"; \
293+
echo -e "$(INFO)Detected OS: $$(uname)$(RESET)"; \
294+
exit 1; \
295+
fi
296+
@echo -e "$(PASS)✅ Running on macOS$(RESET)"
297+
298+
.PHONY: check-e2e-dependencies
299+
check-e2e-dependencies:
300+
@echo -e "$(DIM)Checking E2E dependencies...$(RESET)"
301+
@# Check Docker installation
302+
@if ! command -v docker &> /dev/null; then \
303+
echo -e "$(WARN)❌ Docker is not installed or not in PATH$(RESET)"; \
304+
exit 1; \
305+
fi
306+
@echo -e "$(PASS)✅ Docker is installed$(RESET)"
307+
@# Check if Docker daemon is running
308+
@if ! docker info &> /dev/null 2>&1; then \
309+
echo -e "$(WARN)❌ Docker daemon is not running. Please start Docker.$(RESET)"; \
310+
exit 1; \
311+
fi
312+
@echo -e "$(PASS)✅ Docker daemon is running$(RESET)"
313+
@# Check Anvil installation
314+
@if ! command -v anvil &> /dev/null; then \
315+
echo -e "$(WARN)❌ Anvil is not installed or not in PATH$(RESET)"; \
316+
exit 1; \
317+
fi
318+
@echo -e "$(PASS)✅ Anvil is installed$(RESET)"
319+
@# Check Forge installation
320+
@if ! command -v forge &> /dev/null; then \
321+
echo -e "$(WARN)❌ Forge is not installed or not in PATH$(RESET)"; \
322+
exit 1; \
323+
fi
324+
@echo -e "$(PASS)✅ Forge is installed$(RESET)"
325+
326+
.PHONY: pull-e2e-docker-images
327+
pull-e2e-docker-images:
328+
@echo -e "$(DIM)Checking Docker images for E2E tests...$(RESET)"
329+
@if ! docker image inspect localstack/localstack@sha256:763947722c6c8d33d5fbf7e8d52b4bddec5be35274a0998fdc6176d733375314 > /dev/null 2>&1; then \
330+
echo -e "$(INFO)Pulling localstack image...$(RESET)"; \
331+
docker pull localstack/localstack@sha256:763947722c6c8d33d5fbf7e8d52b4bddec5be35274a0998fdc6176d733375314; \
332+
else \
333+
echo -e "$(PASS)✅ LocalStack image already exists$(RESET)"; \
334+
fi
335+
@if ! docker image inspect mongo:latest > /dev/null 2>&1; then \
336+
echo -e "$(INFO)Pulling mongo image...$(RESET)"; \
337+
docker pull mongo:latest; \
338+
else \
339+
echo -e "$(PASS)✅ Mongo image already exists$(RESET)"; \
340+
fi
341+
@echo -e "$(PASS)✅ All Docker images ready$(RESET)"
342+
343+
344+
.PHONY: build-e2e-binaries
345+
build-e2e-binaries:
346+
@echo -e "$(DIM)Building E2E binaries...$(RESET)"
347+
@mkdir -p $(CARGO_TARGET_DIR)/release
348+
@# Build Madara
349+
@echo -e "$(INFO)Building Madara...$(RESET)"
350+
@CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) cargo build --manifest-path madara/Cargo.toml --bin madara --release
351+
@# Build Orchestrator
352+
@echo -e "$(INFO)Building Orchestrator...$(RESET)"
353+
@CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) cargo build --package orchestrator --bin orchestrator --release
354+
@# Build Bootstrapper
355+
@echo -e "$(INFO)Building Bootstrapper...$(RESET)"
356+
@CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) cargo build --package bootstrapper --bin bootstrapper --release
357+
@# Build E2E test package
358+
@echo -e "$(INFO)Building E2E test package...$(RESET)"
359+
@CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) cargo build -p e2e
360+
@echo -e "$(PASS)✅ All binaries built$(RESET)"
361+
362+
.PHONY: download-pathfinder-mac
363+
download-pathfinder-mac:
364+
@echo -e "$(DIM)Downloading Pathfinder binary for Mac...$(RESET)"
365+
@mkdir -p $(CARGO_TARGET_DIR)/release
366+
@if [ ! -f $(CARGO_TARGET_DIR)/release/pathfinder ]; then \
367+
curl -L -o pathfinder.tar.gz $(PATHFINDER_URL_MAC); \
368+
tar -xf pathfinder.tar.gz -C $(CARGO_TARGET_DIR)/release/; \
369+
rm pathfinder.tar.gz; \
370+
echo -e "$(PASS)✅ Pathfinder downloaded$(RESET)"; \
371+
else \
372+
echo -e "$(INFO)Pathfinder binary already exists, skipping download.$(RESET)"; \
373+
fi
374+
375+
.PHONY: make-e2e-binaries-executable
376+
make-e2e-binaries-executable:
377+
@echo -e "$(DIM)Making binaries executable...$(RESET)"
378+
@chmod +x $(CARGO_TARGET_DIR)/release/madara
379+
@chmod +x $(CARGO_TARGET_DIR)/release/bootstrapper
380+
@chmod +x $(CARGO_TARGET_DIR)/release/pathfinder
381+
@chmod +x $(CARGO_TARGET_DIR)/release/orchestrator
382+
@chmod +x test_utils/scripts/deploy_dummy_verifier.sh
383+
@echo -e "$(PASS)✅ Binaries are executable$(RESET)"
384+
385+
.PHONY: run-e2e
386+
run-e2e:
387+
@echo -e "$(DIM)Running E2E bridge tests...$(RESET)"
388+
@AWS_REGION=$(AWS_REGION) \
389+
CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) \
390+
RUST_LOG=info cargo test \
391+
--package e2e test_bridge_deposit_and_withdraw \
392+
-- --test-threads=10 --nocapture
393+
@echo -e "$(PASS)✅ E2E bridge tests completed$(RESET)"
394+
395+
.PHONY: clean-up-after-e2e
396+
clean-up-after-e2e:
397+
@echo -e "$(DIM)Cleaning up e2e_data directory...$(RESET)"
398+
@rm -rf e2e_data
399+
@echo -e "$(PASS)✅ e2e_data directory cleaned$(RESET)"
400+
401+
# ============================================================================ #
402+
232403
.PHONY: test-orchestrator
233404
test-orchestrator:
234405
@echo -e "$(DIM)Running unit tests with coverage...$(RESET)"

0 commit comments

Comments
 (0)