🧭 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.
🎬 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.
ℹ️
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.
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:
https://nis2.agile.software/test-runner.php?t=Nis2Test2026
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
https://nis2.agile.software/simulate.html
php simulate-nis2.php
php simulate-nis2.php --sim=SIM02
php simulate-nis2.php --sim=SIM06
NIS2_SIM=SIM06 php simulate-nis2.php
NIS2_API_BASE=https://... php simulate-nis2.php
NIS2_DEMO_EMAIL=test@... php simulate-nis2.php
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:
$S = [
'jwt' => [],
'orgs' => [],
'users' => [],
'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:
Settore: IT / Cloud & Data Center
Tipo: Essential Entity
Dipendenti: 320
Sede: Milano
Scenari: SIM-01, SIM-02 (Ransomware)
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.
🔍
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
php8.4 /var/www/nis2-agile/scripts/feedback-worker.php
tail -f /var/log/nis2/feedback-worker.log
[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.
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
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.