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

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.