Files
patrickandClaude Sonnet 5 83de555af4
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
IAM-23: e2e-Skripte auf Sitzungsschluessel-Konfiguration nachgezogen
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 10:38:54 +02:00

68 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Ende-zu-Ende Core -> DMS auf dem Entwicklungshost (Wegwerf-Cluster 17/coredev, Port 5433):
# echter Kontodienst (Login, Modul-JWT, JWKS) und echter Policy-Dienst gegen migrierte Datenbanken,
# das DMS prueft Token und Rechte ueber dessen produktive Kette (apiwiring.Chain).
# usage (im Repo-Root): scripts/e2e-core-dms.sh
set -euo pipefail
cluster=/etc/nexarch-dev/core-cluster.sh
set -a
source /etc/nexarch-dev/core-dev.env
source /etc/nexarch-dev/tenant-dev.env
set +a
export PATH="$PATH:/usr/local/go/bin"
work="$(mktemp -d /tmp/nexarch-e2e-XXXXXX)"
pids=()
cleanup() {
for p in "${pids[@]:-}"; do kill "$p" 2>/dev/null || true; done
"$cluster" stop || true
rm -rf "$work"
}
trap cleanup EXIT
password="e2e-$(head -c 12 /dev/urandom | od -An -tx1 | tr -d ' \n')"
policy_token="e2e-$(head -c 12 /dev/urandom | od -An -tx1 | tr -d ' \n')"
jwt_secret="e2e-$(head -c 16 /dev/urandom | od -An -tx1 | tr -d ' \n')"
module_key_encryption_key="$(head -c 32 /dev/urandom | base64)"
session_key_encryption_key="$(head -c 32 /dev/urandom | base64)"
"$cluster" resettenant
for f in $(ls migrations/*.up.sql | sort); do
psql "$TEST_ADMIN_DSN" -q -v ON_ERROR_STOP=1 -f "$f" >/dev/null
done
for f in $(ls migrations/tenant/*.up.sql | sort); do
psql "$TEST_TENANT_DSN" -q -v ON_ERROR_STOP=1 -f "$f" >/dev/null
done
# RBAC-10: DMS-Rechte sind an das Modul-Flag "dms" gebunden, aktiv nur fuer den Mandanten e2e.
psql "$TEST_ADMIN_DSN" -q -v ON_ERROR_STOP=1 -c "INSERT INTO feature_flags (key, enabled, rollout_percentage, target_tenant_slugs) VALUES ('dms', false, 0, '{e2e}') ON CONFLICT (key) DO UPDATE SET enabled = false, target_tenant_slugs = '{e2e}'" >/dev/null
go build -o "$work/account-api" ./cmd/account-api
go build -o "$work/policy-api" ./cmd/policy-api
NEXARCH_E2E_TENANT_DSN="$TEST_TENANT_DSN" NEXARCH_E2E_PASSWORD="$password" go run ./scripts/e2e-seed
NEXARCH_ACCOUNT_TENANT_DSN="$TEST_TENANT_DSN" NEXARCH_ACCOUNT_TENANT_SLUG=e2e NEXARCH_ACCOUNT_JWT_SECRET="$jwt_secret" \
NEXARCH_ACCOUNT_MODULE_KEY_ENCRYPTION_KEY="$module_key_encryption_key" NEXARCH_ACCOUNT_MODULE_KEY_REFRESH_SECONDS=1 \
NEXARCH_ACCOUNT_SESSION_KEY_ENCRYPTION_KEY="$session_key_encryption_key" NEXARCH_ACCOUNT_SESSION_KEY_REFRESH_SECONDS=1 \
NEXARCH_ACCOUNT_API_LISTEN_ADDR=127.0.0.1:8099 NEXARCH_ACCOUNT_MODULE_TOKEN_TTL_SECONDS=5 \
"$work/account-api" >"$work/account.log" 2>&1 &
pids+=($!)
account_pid=$!
NEXARCH_POLICY_ADMIN_DSN="$TEST_ADMIN_DSN" NEXARCH_POLICY_SERVICE_TOKEN="$policy_token" NEXARCH_POLICY_API_LISTEN_ADDR=127.0.0.1:8093 \
NEXARCH_POLICY_ALLOWED_TENANTS=e2e NEXARCH_POLICY_FLAG_CACHE_TTL_SECONDS=1 \
"$work/policy-api" >"$work/policy.log" 2>&1 &
pids+=($!)
policy_pid=$!
for url in http://127.0.0.1:8099/healthz http://127.0.0.1:8093/healthz; do
for _ in $(seq 1 50); do curl -fsS "$url" >/dev/null 2>&1 && break; sleep 0.2; done
curl -fsS "$url" >/dev/null || { echo "dienst nicht erreichbar: $url" >&2; tail -20 "$work"/*.log >&2; exit 1; }
done
cd dms
TEST_CORE_ACCOUNT_URL=http://127.0.0.1:8099 TEST_CORE_POLICY_URL=http://127.0.0.1:8093 \
TEST_CORE_POLICY_TOKEN="$policy_token" TEST_CORE_ADMIN_DSN="$TEST_ADMIN_DSN" TEST_CORE_PASSWORD="$password" TEST_CORE_SHORT_TTL=1 \
TEST_CORE_STOP_POLICY_CMD="kill $policy_pid" TEST_CORE_STOP_ACCOUNT_CMD="kill $account_pid" \
go test -count=1 -v -timeout 300s -run TestCoreE2E ./internal/apiwiring/