Add e2e/ dir with Robot Framework tests for page loading, ban records, blocklist import, config edit. Add requirements.txt. Update Makefile with test commands. Update .gitignore, backend docs, testing requirements docs.
97 lines
3.5 KiB
Makefile
97 lines
3.5 KiB
Makefile
# ──────────────────────────────────────────────────────────────
|
|
# BanGUI — Project Makefile
|
|
#
|
|
# Compatible with both Docker Compose and Podman Compose.
|
|
# Auto-detects which compose binary is available.
|
|
#
|
|
# Usage:
|
|
# make up — start the debug stack
|
|
# make down — stop the debug stack
|
|
# make build — (re)build the backend image without starting
|
|
# make clean — stop, remove all containers, volumes, and local images
|
|
# make logs — tail logs for all debug services
|
|
# make restart — restart the debug stack
|
|
# make dev-ban-test — one-command smoke test of the ban pipeline
|
|
# make e2e — run the Robot Framework E2E test suite
|
|
# ──────────────────────────────────────────────────────────────
|
|
|
|
COMPOSE_FILE := Docker/compose.debug.yml
|
|
|
|
# Compose project name (matches `name:` in compose.debug.yml).
|
|
PROJECT := bangui-dev
|
|
|
|
# All named volumes declared in compose.debug.yml.
|
|
# Compose prefixes them with the project name.
|
|
DEV_VOLUMES := \
|
|
$(PROJECT)_bangui-dev-data \
|
|
$(PROJECT)_frontend-node-modules \
|
|
$(PROJECT)_fail2ban-dev-config \
|
|
$(PROJECT)_fail2ban-dev-run
|
|
|
|
# Locally-built images (compose project name + service name).
|
|
# Public images (fail2ban, node) are intentionally excluded.
|
|
DEV_IMAGES := \
|
|
$(PROJECT)_backend
|
|
|
|
# Detect available compose binary.
|
|
COMPOSE := $(shell command -v podman-compose 2>/dev/null \
|
|
|| echo "podman compose")
|
|
|
|
# Detect available container runtime (podman or docker).
|
|
RUNTIME := $(shell command -v podman 2>/dev/null || echo "docker")
|
|
|
|
.PHONY: up down build restart logs clean dev-ban-test e2e
|
|
|
|
## Start the debug stack (detached).
|
|
## Ensures log stub files exist so fail2ban can open them on first start.
|
|
up:
|
|
@mkdir -p Docker/logs
|
|
@touch Docker/logs/auth.log
|
|
$(COMPOSE) -f $(COMPOSE_FILE) up -d
|
|
|
|
## Stop the debug stack.
|
|
down:
|
|
$(COMPOSE) -f $(COMPOSE_FILE) down
|
|
|
|
## (Re)build the backend image without starting containers.
|
|
build:
|
|
$(COMPOSE) -f $(COMPOSE_FILE) build
|
|
|
|
## Restart the debug stack.
|
|
restart: down up
|
|
|
|
## Tail logs for all debug services.
|
|
logs:
|
|
$(COMPOSE) -f $(COMPOSE_FILE) logs -f
|
|
|
|
## Stop containers, remove ALL debug volumes and locally-built images.
|
|
## The next 'make up' will rebuild images from scratch and start fresh.
|
|
clean:
|
|
$(COMPOSE) -f $(COMPOSE_FILE) down --remove-orphans
|
|
$(RUNTIME) volume rm $(DEV_VOLUMES) 2>/dev/null || true
|
|
$(RUNTIME) rmi $(DEV_IMAGES) 2>/dev/null || true
|
|
@echo "All debug volumes and local images removed. Run 'make up' to rebuild and start fresh."
|
|
|
|
## Run the Robot Framework E2E test suite.
|
|
## Requires: stack up (make up), BANGUI_SESSION_SECRET env var set.
|
|
## Installs: pip install -r e2e/requirements.txt && rfbrowser init
|
|
e2e: up
|
|
@echo "Waiting for stack to be healthy..."
|
|
@timeout=120; \
|
|
until curl -sf http://localhost:8000/api/health > /dev/null 2>&1; do \
|
|
sleep 5; timeout=$$((timeout-5)); \
|
|
if [ $$timeout -le 0 ]; then echo "Backend not healthy after 120s"; exit 1; fi; \
|
|
done
|
|
pip install -r e2e/requirements.txt -q
|
|
rfbrowser init --quiet
|
|
robot --outputdir e2e/results e2e/tests/
|
|
|
|
## One-command smoke test for the ban pipeline:
|
|
## 1. Start fail2ban, 2. write failure lines, 3. check ban status.
|
|
dev-ban-test:
|
|
$(COMPOSE) -f $(COMPOSE_FILE) up -d fail2ban
|
|
sleep 5
|
|
bash Docker/simulate_failed_logins.sh
|
|
sleep 3
|
|
bash Docker/check_ban_status.sh
|