Skip to content

Commit

Permalink
chore: added makerfile to make local e2e test a breeze
Browse files Browse the repository at this point in the history
added makerfile to make local e2e test a breeze:

working

improved maker file structure with output logs for debug purpose
  • Loading branch information
aruokhai committed Oct 19, 2024
1 parent 861eef8 commit 6377c76
Show file tree
Hide file tree
Showing 5 changed files with 1,155 additions and 7 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,7 @@ lerna-debug.log*
!.vscode/extensions.json

# misc
/.silent-pay-indexer
/.silent-pay-indexer

#e2e
/.logs
55 changes: 55 additions & 0 deletions e2e/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Variables
DOCKER_COMPOSE_FILE = helpers/docker/docker-compose.yml
NESTJS_SERVICE_PORT = 3000
INDEXER_TEST_CMD = npm run test:e2e
MAX_RETRIES = 10 # Number of retries to check if the inddexer service is up
RETRY_INTERVAL = 5 # Seconds between retries
PM2_CMD = npx pm2
NPM_CMD = npm
APP_NAME = silent-indexer
LOG_DIR = .logs
INDEXER_OUTPUT_LOG = $(LOG_DIR)/$(APP_NAME)-out.log
INDEXER_ERROR_LOG = $(LOG_DIR)/$(APP_NAME)-error.log

# Targets
.PHONY: all start-bitcoind start-indexer setup test clean

# Default target
all: setup test
@$(MAKE) clean

# Start Docker Compose services
start-bitcoind:
@echo "Starting Docker Compose services..."
docker compose -f $(DOCKER_COMPOSE_FILE) up -d

# Start the Indexer service
start-indexer:
@echo "Starting the Indexer service with PM2..."
$(PM2_CMD) start $(NPM_CMD) --name $(APP_NAME) --output $(INDEXER_OUTPUT_LOG) --error $(INDEXER_ERROR_LOG) -- run start:e2e

# Wait for the Indexer service to be available before running tests
setup: start-bitcoind start-indexer
@echo "Waiting for Indexer service to be ready on port $(NESTJS_SERVICE_PORT)..."
@count=0; \
while ! nc -z localhost $(NESTJS_SERVICE_PORT) && [ $$count -lt $(MAX_RETRIES) ]; do \
count=$$((count + 1)); \
echo "Waiting for service... ($$count/$(MAX_RETRIES))"; \
sleep $(RETRY_INTERVAL); \
done; \
if ! nc -z localhost $(NESTJS_SERVICE_PORT); then \
echo "Error: Service not available after $(MAX_RETRIES) retries, exiting."; \
exit 1; \
fi

# Run the end-to-end tests
test:
@echo "Running end-to-end tests..."
$(INDEXER_TEST_CMD)

# Stop all services and delete all files
clean:
@echo "Stopping and removing Docker Compose services..."
docker compose -f $(DOCKER_COMPOSE_FILE) down -v
$(PM2_CMD) delete $(APP_NAME) || echo "Warning: PM2 delete command failed, but continuing..."
@echo "Clean up completed."
39 changes: 39 additions & 0 deletions e2e/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# End-to-End Testing Setup

This guide explains how to run end-to-end (E2E) tests for our Silent Indexer application using a `Makefile`. The steps include installing `make`, setting up PM2, and executing the tests.

## Prerequisites

- Node.js and npm must be installed on your machine. You can download them from [Node.js official website](https://nodejs.org/).

## Step 1: Install `make`

### On Linux

Most Linux distributions come with `make` pre-installed. If not, you can install it using your package manager.

For **Debian/Ubuntu**:

```bash
sudo apt-get update
sudo apt-get install make
```

## Step 2: Install Dependencies

1. Run the following command to install the npm dependencies specified in package.json:

```bash
npm install
```
This command will download all the packages listed in dependencies and devDependencies from the npm registry.


## Step 3: Run e2e
Ensure you are in __e2e__ directory and that port 3000 is free.

1. **Run the following command** to run e2e test using make:

```bash
make
```
Loading

0 comments on commit 6377c76

Please sign in to comment.