NIS2 Agile — Documentazione Tecnica

# Sistema di Testing & Simulazione

Due strumenti integrati per verificare la correttezza della piattaforma e dimostrare scenari reali NIS2 in ambienti demo.

Test Runner v2 — 36+ test Simulazione — 6 scenari 3 aziende demo

## 🧭 Panoramica

NIS2 Agile dispone di due strumenti distinti ma complementari per la verifica della qualità e la dimostrazione delle funzionalità:

🧪 Test Runner

Suite di test automatizzati a 6 livelli che verifica ogni endpoint API con asserzioni precise. Accesso protetto da token, output streaming in tempo reale, reset dati integrato.

Apri Test Runner →
🎬 Simulazione Demo

Costruisce dati realistici attraverso le API reali (nessun INSERT SQL diretto) simulando 3 aziende con settori e complessità diversi su 6 scenari NIS2 reali.

Apri Simulatore →
ℹ️
I due sistemi sono progettati per lavorare in sequenza: prima si esegue la simulazione per creare i dati demo, poi il test runner per verificare che tutto funzioni correttamente. Il pulsante "Reset + Simula + Testa Tutto" li esegue entrambi in automatico.

## 🧪 Test Runner

Il Test Runner è un'applicazione PHP (`public/test-runner.php`) che espone una UI web dark-theme con streaming SSE dei risultati in tempo reale. I test sono organizzati in 6 livelli funzionali più un livello infrastrutturale.

36+
Test totali
6
Livelli
SSE
Output streaming
JWT
Auth token-based

### Livelli di Test

Livello | Nome | Cosa verifica | Dipendenze
--- | --- | --- | ---
INFRA | Health & Smoke | API status, endpoint rapidi, connettività DB | —
L1 | Auth & JWT | Login, register, JWT access/refresh, change-password, rate limiting | —
L2 | Multi-Tenant Isolation | Isolamento dati tra organizzazioni diverse, cross-org protection | SIM-01
L3 | Compliance Core | Assessment, rischi, incidenti, policy, supply chain, asset, training, NCR/CAPA | SIM-01
L4 | B2B & Services API | X-API-Key auth, scopes (read:all, admin:licenses), invite lifecycle, webhook delivery | SIM-01, SIM-06
L5 | Export & Reports | CSV export (rischi/incidenti/asset/controlli), report HTML, audit executive | SIM-01
L6 | AI Features | Cross-org portfolio analysis, AI classify incident, AI suggest risk, normative feed | SIM-01, consultant user
SIM | Simulazioni | Esecuzione completa SIM-01→06 con output dettagliato | Demo users nel DB

### Accesso e autenticazione

Il Test Runner è protetto da un token di sessione configurato come costante PHP:

// Primo accesso — passa il token come query string https://nis2.agile.software/test-runner.php?t=Nis2Test2026 // Sessioni successive — il token è memorizzato in $_SESSION https://nis2.agile.software/test-runner.php

### Output streaming (SSE)

I test vengono eseguiti come comandi bash su server. I risultati vengono trasmessi in tempo reale tramite Server-Sent Events al browser. Ogni test mostra:

✓ PASS

Il comando ha restituito exit code 0 e l'output atteso.

✗ FAIL

Il comando ha restituito errore o output non corrispondente.

⚠ SKIP

Dipendenza mancante (utente demo non creato, SIM non eseguita).

⚡ WARN

Il test è passato ma con avvertimenti non bloccanti.

### Comandi speciali

Comando | Funzione
--- | ---
Verifica Hash Chain | Esegue `simulate-nis2.php --sim=SIM05` per verificare integrità SHA-256 del audit trail
Reset Dati Demo | Esegue `reset-demo.sql` — cancella org/utenti con id>4 e email `%.demo%`
Full Suite L1→L6 | Esegue tutti i 6 livelli in sequenza, con output cumulativo
Reset + Simula + Testa | Pipeline completa: reset → SIM-01→06 → Full Suite L1→L6
DB Stats | Conta record per tabella via endpoint JSON

## 🎬 Sistema di Simulazione

Il simulatore (`simulate-nis2.php`) costruisce dati demo realistici esclusivamente attraverso le API REST, come farebbe un utente reale. Nessun INSERT SQL diretto: ogni operazione testa sia la logica di business che la persistenza dati.

⚠️
Idempotenza: se un'organizzazione demo esiste già (stessa P.IVA), lo step viene saltato silenziosamente (`SKIP idempotent`) senza errore. Per ripartire da zero usare prima il Reset Dati Demo.

### Utilizzo

# Via browser (SSE streaming con UI dark-theme) https://nis2.agile.software/simulate.html # Via CLI sul server php simulate-nis2.php # tutti gli scenari php simulate-nis2.php --sim=SIM02 # solo SIM-02 php simulate-nis2.php --sim=SIM06 # solo B2B (indipendente) # Variabili d'ambiente opzionali NIS2_SIM=SIM06 php simulate-nis2.php # alias env per --sim NIS2_API_BASE=https://... php simulate-nis2.php # override URL API NIS2_DEMO_EMAIL=test@... php simulate-nis2.php # redirect email demo

### I 6 Scenari

SIM-01
Onboarding + Gap Assessment
Registra 3 aziende, completa l'onboarding multi-step, esegue il gap assessment completo con tutte le 80 domande Art.21 NIS2 per ogni organizzazione.
→ Registrazione + email welcome
→ Setup org (settore, dipendenti, entity type)
→ 80 domande × 3 aziende (categorizzate per Art.21)
→ Completamento assessment + score compliance
SIM-02
Incidente Ransomware Art.23
Simula un attacco ransomware critico su DataCore S.r.l. con attivazione della timeline obbligatoria NIS2 (early warning 24h, notification 72h, final report 30d).
→ Creazione incidente severity=critical
→ AI classify: categoria, suggerimenti, severity
→ Early warning CSIRT (24h)
→ Notification formale (72h) + final report (30d)
SIM-03
Data Breach Supply Chain
Fornitore IT di MedClinic compromesso: aggiunta fornitore critico, assessment sicurezza, attivazione incidente Art.23 parallelo con gestione supply chain.
→ Aggiunta fornitore risk=critical
→ Security assessment fornitore
→ Data breach incident con AI classification
→ Risk register aggiornato automaticamente
SIM-04
Whistleblowing Anonimo SCADA
Segnalazione anonima Art.32 NIS2 per accesso non autorizzato ai sistemi SCADA di EnerNet. Assegnazione investigatore, tracciamento timeline, chiusura con esito.
→ Submit anonimo (no auth, solo token tracking)
→ Assegnazione a compliance manager
→ Timeline investigazione (3 eventi)
→ Chiusura con esito e verifica tracking anonimo
SIM-05
Audit Trail Hash Chain
Verifica l'integrità della catena SHA-256 dell'audit trail per tutte e 3 le organizzazioni. Rileva eventuali record manomessi e genera export certificato.
→ Fetch audit log con prev_hash + entry_hash
→ Verifica catena SHA-256 record per record
→ Report integrità: verified/tampered/gaps
→ Export certificato JSON (con hash contenuto)
SIM-06
B2B License Provisioning
Provisioning automatico di una nuova organizzazione tramite invite token B2B. SSO federato, token exchange, creazione org + utente + API key in un'unica chiamata.
→ Creazione invite token (admin:licenses)
→ POST /api/services/provision con X-Provision-Secret
→ Org + user + api_key creati atomicamente
→ Verifica scadenza licenza + SSO JWT exchange

### Architettura del simulatore

Il simulatore mantiene uno stato globale `$S` durante l'esecuzione per tracciare JWT, org IDs e statistiche:

// Stato globale simulazione (in-memory per sessione) $S = [ 'jwt' => [], // ['email' => token] 'orgs' => [], // ['slug' => ['id', 'name', 'jwt']] 'users' => [], // ['email' => ['id', 'jwt']] 'stats' => ['pass' => 0, 'skip' => 0, 'fail' => 0, 'warn' => 0], ];

## 🏢 Aziende Demo

Le simulazioni creano 3 organizzazioni demo con caratteristiche diversificate per coprire i principali settori NIS2 e i diversi livelli di obblighi normativi:

DataCore S.r.l.
Settore: IT / Cloud & Data Center
Tipo: Essential Entity
Dipendenti: 320
Sede: Milano
Scenari: SIM-01, SIM-02 (Ransomware)
MedClinic Italia S.p.A.
Settore: Sanità
Tipo: Important Entity
Dipendenti: 750
Sede: Roma
Scenari: SIM-01, SIM-03 (Supply Chain)
EnerNet Distribuzione S.r.l.
Settore: Energia
Tipo: Essential / Critical
Dipendenti: 1.800
Sede: Torino
Scenari: SIM-01, SIM-04 (SCADA)
✅
Tutti gli utenti demo usano la password NIS2Demo2026!. Le email vengono reindirizzate all'indirizzo configurato in `NIS2_DEMO_EMAIL` (default: `demo@nis2agile.it`).

## 🤖 Worker Feedback AI

Oltre ai test e alle simulazioni, la piattaforma include un worker autonomo per la risoluzione automatica delle segnalazioni utente tramite Claude AI.

🕐
Ogni 30 min
cron root
🔍
Fetch ticket
status=in_lavorazione
🤖
Claude Code CLI
docker exec nis2-agile-devenv
✅
POST /resolve
con password gate
📧
Email broadcast
tutti i membri org

### Configurazione

Script
scripts/feedback-worker.php
Crontab
*/30 * * * * /usr/bin/php8.4 /var/www/nis2-agile/scripts/feedback-worker.php
Log
/var/log/nis2/feedback-worker.log
Account worker
worker@nis2.agile.software (super_admin, dedicato)

### Test del worker

# Run manuale (Hetzner SSH) php8.4 /var/www/nis2-agile/scripts/feedback-worker.php # Verifica log tail -f /var/log/nis2/feedback-worker.log # Output atteso (nessun ticket) [2026-03-10 09:16:27] === Feedback Worker avviato === [2026-03-10 09:16:27] Nessun ticket in lavorazione. Worker terminato.

## 🔗 URL di Accesso

### Produzione

🎬 Simulatore Demo 🧪 Test Runner ❤️ Health Check

### DevEnv (container locale)

🔧 Dev API 💻 Dev IDE 🌐 Dev Browser

### Reset dati demo

⚠️
Il reset cancella tutte le organizzazioni e gli utenti con `id > 4` e email che contengono `.demo`. Le 4 org base e i super admin vengono preservati.
# Via Test Runner UI → tasto "Reset Dati Demo" # Via SSH (Hetzner) mysql -u nis2_user -p nis2_agile_db < /var/www/nis2-agile/docs/sql/reset-demo.sql

## 🔑 Credenziali

### Test Runner

Token accesso
Nis2Test2026
URL
https://nis2.agile.software/test-runner.php?t=Nis2Test2026

### Utenti demo (creati da SIM-01)

Password comune
NIS2Demo2026!
DataCore admin
admin@datacore-srl.demo
MedClinic admin
admin@medclinic.demo
EnerNet admin
admin@enernet.demo
Consultant
consultant@nis2agile.demo

### API Key demo (DataCore — read:all)

Chiave
nis2_152c1d87f8e6613d18a0510fd907c082
Scope
read:all
Header
X-API-Key: nis2_152c1d87f8e6613d18a0510fd907c082

### Sistema Feedback

Password resolve
Nis2Feedback2026!
Worker account
worker@nis2.agile.software
🔒
Queste credenziali sono per uso esclusivo in ambiente di test/demo. Non usarle in produzione reale. La pagina non è indicizzata dai motori di ricerca.