diff --git a/public/docs/testing-simulazione.html b/public/docs/testing-simulazione.html new file mode 100644 index 0000000..8c891eb --- /dev/null +++ b/public/docs/testing-simulazione.html @@ -0,0 +1,789 @@ + + + + + + NIS2 Agile — Sistema di Testing & Simulazione + + + + + +
+
+
+ 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

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LivelloNomeCosa verificaDipendenze
INFRAHealth & SmokeAPI status, endpoint rapidi, connettività DB
L1Auth & JWTLogin, register, JWT access/refresh, change-password, rate limiting
L2Multi-Tenant IsolationIsolamento dati tra organizzazioni diverse, cross-org protectionSIM-01
L3Compliance CoreAssessment, rischi, incidenti, policy, supply chain, asset, training, NCR/CAPASIM-01
L4B2B & Services APIX-API-Key auth, scopes (read:all, admin:licenses), invite lifecycle, webhook deliverySIM-01, SIM-06
L5Export & ReportsCSV export (rischi/incidenti/asset/controlli), report HTML, audit executiveSIM-01
L6AI FeaturesCross-org portfolio analysis, AI classify incident, AI suggest risk, normative feedSIM-01, consultant user
SIMSimulazioniEsecuzione completa SIM-01→06 con output dettagliatoDemo 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

+
+ + + + + + + + + +
ComandoFunzione
Verifica Hash ChainEsegue simulate-nis2.php --sim=SIM05 per verificare integrità SHA-256 del audit trail
Reset Dati DemoEsegue reset-demo.sql — cancella org/utenti con id>4 e email %.demo%
Full Suite L1→L6Esegue tutti i 6 livelli in sequenza, con output cumulativo
Reset + Simula + TestaPipeline completa: reset → SIM-01→06 → Full Suite L1→L6
DB StatsConta 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

+ + + +

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.
+
+
+ +
+ + + + + + +