@@ -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)
101102DOCKER_GZ := image.tar.gz
102103ARTIFACTS := ./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
105111DIM := \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
233404test-orchestrator :
234405 @echo -e " $( DIM) Running unit tests with coverage...$( RESET) "
0 commit comments