Rapport de test qualité - Edu-Kit
Version : 1.0 | Date : 17/05/2026 | Statut : Livraison concluante
Sprint / Release : Sprint 4 (01/05/2026 - 17/05/2026)
Sommaire
- Présentation
- Périmètre de test
- Environnements de test
- Description des tests et résultats
- Anomalies
- Conclusion
- Lexique
1. Présentation
1.1 Objet du document
Ce rapport de test qualité documente les activités de test réalisées à la livraison du Sprint 4 du projet Edu-Kit. Il synthétise l’état de la couverture de test, les résultats obtenus sur l’ensemble de la suite automatisée, les anomalies identifiées et formule une recommandation de livraison.
Il s’inscrit dans la stratégie de test définie dans le document Stratégie de test et est produit avant toute démonstration ou mise à disposition de la release sprint.
1.2 Contexte du projet
Edu-Kit est une plateforme de virtualisation pédagogique permettant aux établissements d’enseignement de mettre à disposition des machines virtuelles pour leurs étudiants. Elle repose sur une architecture microservices composée de trois dépôts :
| Composant | Technologie | Rôle |
|---|---|---|
| OrgService | .NET 9 / C# - Clean Architecture + CQRS | Gestion des organisations, utilisateurs, groupes, environnements et sessions de travail |
| VmService | .NET 9 / C# - Clean Architecture + CQRS | Gestion des templates VM, provisionnement Proxmox, cycle de vie des machines virtuelles |
| Edukit-Front | Angular 21 / TypeScript | Interface utilisateur (SPA) consommant les deux services via REST et SignalR |
L’authentification est déléguée à Keycloak 26 (protocole OIDC/PKCE) avec quatre rôles applicatifs : superadmin, admin, teacher, student.
1.3 Contexte du Sprint 4
Le Sprint 4 (01/05/2026 - 17/05/2026) a livré les fonctionnalités suivantes :
OrgService :
- Cycle de vie complet des sessions de travail (
WorkSession) : création, démarrage, pause/reprise, complétion, annulation, mise à jour, consultation et historique des transitions. - Consommation de l’événement inter-service
VmCredentialIssued: réception depuis VmService via RabbitMQ (Wolverine), décryptage AES-256-GCM du payload, envoi d’email SMTP via MailKit. - Template d’email d’accès VM bilingue texte/HTML (variantes émission initiale et réinitialisation), avec encodage sécurisé du contenu HTML, commande SSH intégrée si l’adresse IP est disponible.
VmService :
- Sagas de cycle de vie des VMs : démarrage asynchrone (
VmStartSaga), arrêt asynchrone (VmStopSaga), destruction asynchrone (VmDestroySaga). - Opérations batch sur un environnement : démarrage de toutes les VMs (
StartAllEnvironmentVms), arrêt de toutes les VMs (StopAllEnvironmentVms), suppression de toutes les VMs (DeleteWorkEnvironmentVms). - Réinitialisation des credentials VM : génération d’un nouveau mot de passe, application via qemu-guest-agent (
set-user-password), re-publication de l’événementVmCredentialIssuedavecIsReset = true. - Nouvelle tentative de provisionnement sur VM en échec (
RetryVmCreation). - Service d’autorisation pour le hub SignalR (
VmStatusHubAuthorizationService) : contrôle d’accès par rôle et appartenance au groupe de l’environnement.
Edukit-Front :
- Composant de gestion des utilisateurs (
UserManagement) avec test de composant. - Intégration SignalR (
VmStatusHubService) pour la réception des mises à jour temps réel de statut des VMs.
2. Périmètre de test
2.1 Fonctionnalités couvertes dans ce sprint
| Composant | Fonctionnalité | Type(s) de test réalisé(s) |
|---|---|---|
| OrgService | Sessions de travail - CreateWorkSession, StartWorkSession, CompleteWorkSession, CancelWorkSession, UpdateWorkSession | Unitaire (handler, validator, authorization) |
| OrgService | Sessions de travail - GetWorkSessions, GetWorkSessionById, GetWorkSessionHistories | Unitaire (handler, validator, authorization) |
| OrgService | Service de transition des sessions (WorkSessionTransitionService) |
Unitaire |
| OrgService | Consommation de VmCredentialIssued : décryptage + envoi email |
Unitaire |
| OrgService | Template d’email d’accès VM (corps HTML/texte, variante reset, encodage sécurisé) | Unitaire |
| VmService | Saga de démarrage VM (VmStartSaga) |
Unitaire |
| VmService | Saga d’arrêt VM (VmStopSaga) |
Unitaire |
| VmService | Saga de destruction VM (VmDestroySaga) |
Unitaire |
| VmService | StartAllEnvironmentVms, StopAllEnvironmentVms, DeleteWorkEnvironmentVms | Unitaire (handler, validator, authorization) |
| VmService | ResetVmCredential (génération + agent + événement) | Unitaire (handler, validator, authorization) |
| VmService | RetryVmCreation | Unitaire (handler, validator, authorization) |
| VmService | Service d’autorisation SignalR Hub (VmStatusHubAuthorizationService) |
Unitaire |
| VmService | Service de cycle de vie Proxmox - start/stop/destroy (VmLifecycleService) |
Infrastructure |
| Edukit-Front | Composant UserManagement - initialisation |
Composant (Angular TestBed) |
2.2 Fonctionnalités hors périmètre dans ce sprint
| Fonctionnalité exclue | Justification |
|---|---|
| Utilisateurs (CRUD), Établissements (CRUD) | Fonctionnalités déjà couvertes dans les sprints précédents - code non modifié (voir stratégie de couverture ciblée) |
| Groupes, Environnements de travail | Idem - tests existants constituent la garantie de non-régression |
| Templates VM (activation, archivage, packages) | Idem - aucune modification dans ce sprint |
Saga de provisionnement (VmProvisioningSaga) |
Livrée au Sprint 3 - aucune modification de code dans ce sprint |
| Authentification Keycloak | Infrastructure externe, non modifiée dans ce sprint - validée sur l’environnement de dev (voir AN-003) |
| Endpoints Minimal API | Logique propre quasi nulle - couverts par les tests des handlers et la validation manuelle Insomnia |
GlobalExceptionHandlerMiddleware |
Logique de mapping simple ; comportement couvert implicitement par les tests des handlers |
| Migrations EF Core | Vérifiées au démarrage automatique en environnement de développement |
| Tests E2E | Non implémentés à ce stade du projet (voir section 5 - Anomalies, AN-002) |
SftpSnippetUploader |
Requiert une vraie session SSH - exclu intentionnellement de la suite automatisée (voir AN-004) |
3. Environnements de test
Les tests unitaires et d’infrastructure s’exécutent entièrement en mémoire, sans aucune dépendance Docker. La validation manuelle est réalisée sur l’environnement local de développement.
3.1 Environnement local (développement)
| Composant | URL / Accès | Version |
|---|---|---|
| OrgService API | http://localhost:5100 - Swagger : /swagger |
.NET 9.0 |
| OrgService gRPC | http://localhost:5101 |
.NET 9.0 |
| VmService API | http://localhost:5200 - Swagger : /swagger |
.NET 9.0 |
| VmService Worker | Port interne - health : http://localhost:5300/health |
.NET 9.0 |
| VmService gRPC | http://localhost:5201 |
.NET 9.0 |
| Edukit-Front | http://localhost:4200 |
Angular 21.x |
| Keycloak | http://localhost:8080 |
26.x |
| PostgreSQL | localhost:5432 |
16 |
| RabbitMQ | localhost:5672 |
3.x |
| Proxmox VE | Accès restreint - secrets via dotnet user-secrets |
8.x |
Les dépendances (PostgreSQL, Keycloak, RabbitMQ) sont orchestrées via Docker Compose (dépôt Edukit-Local). La base de données est migrée et seedée automatiquement au démarrage de chaque service.
3.2 Environnement CI/CD (Azure DevOps)
| Composant | Détail |
|---|---|
| Pipeline | azure-pipelines.yml - déclenché à chaque push et à l’ouverture d’une PR |
| Exécution des tests backend | dotnet test - en mémoire, sans Docker |
| Exécution des tests frontend | npx ng test - Vitest + jsdom |
| Collecte de couverture | Rapport coverlet envoyé à SonarQubeCloud |
| Quality Gate | Grade A requis - bloquant avant merge vers dev ou main |
4. Description des tests et résultats
4.1 Rappel - Pyramide de tests et techniques appliquées
Conformément à la stratégie de test, le projet suit la pyramide suivante :
┌──────────┐
│ E2E │ Non implémenté - risque identifié (AN-002)
┌──┴──────────┴──┐
│ Infrastructure │ VmService uniquement - 89 tests / 11 fichiers
┌──┴─────────────────┴──┐
│ Tests unitaires │ Base principale - 1 030 tests / 184 fichiers
└────────────────────────┘
Deux techniques de test sont appliquées, conformément à la section 3.5 de la stratégie :
| Technique | Définition | Application dans ce sprint |
|---|---|---|
| Boîte blanche | Le testeur connaît l’implémentation interne et structure ses cas de test en conséquence | Tests unitaires et d’infrastructure : mocking ciblé des dépendances, couverture des branches métier (chemins nominaux, ressource absente, violations de règles) |
| Boîte noire | Le testeur se base uniquement sur les entrées/sorties, sans connaître le code | Tests manuels Insomnia (collection partagée) et interface Angular : validation des réponses HTTP, comportements UX observés |
La responsabilité de la qualité est collective : chaque développeur rédige les tests de ses propres fonctionnalités ; le reviewer de PR valide la pertinence et la couverture des tests ; le pipeline CI (SonarQube + Azure DevOps) constitue le filet de sécurité automatique.
4.2 Tests unitaires
L’ensemble des tests unitaires est exécuté en mémoire - aucune dépendance Docker n’est requise. Toutes les dépendances externes (repositories, services gRPC, clients Proxmox, bus de messages) sont substituées par des objets simulés (mocks) via Moq.
Résultats globaux à la livraison du Sprint 4
| Composant | Fichiers de test | Tests exécutés | Réussis | Échoués | Ignorés |
|---|---|---|---|---|---|
| OrgService | 97 | 509 | 509 | 0 | 0 |
| VmService | 85 | 517 | 517 | 0 | 0 |
| Edukit-Front | 2 | 4 | 4 | 0 | 0 |
| Total | 184 | 1 030 | 1 030 | 0 | 0 |
Note : Ces totaux incluent l’ensemble des tests écrits depuis le Sprint 1 et présents au moment de la livraison. Le Sprint 4 a contribué environ 252 nouveaux tests à cette suite cumulée (153 OrgService + 98 VmService unitaires + 1 front).
Détail OrgService - périmètre Sprint 4
| Sous-ensemble | Fichiers | Tests |
|---|---|---|
| Handlers - Sessions de travail (8 opérations) | 8 | ~40 |
| Validators - Sessions de travail (8 opérations) | 8 | ~32 |
| Authorization - Sessions de travail (8 opérations) | 8 | ~55 |
| WorkSessionTransitionService | 1 | 11 |
| VmCredentialIssuedHandler | 1 | 4 |
| CredentialIssuedEmailTemplate | 1 | 11 |
| Total Sprint 4 OrgService | 27 | ~153 |
Exemples de cas de test représentatifs :
Handle_WhenUserUnknown_LogsAndDoesNotSend- vérification que l’email n’est pas envoyé si l’utilisateur propriétaire de la VM est introuvable.Build_WhenIpKnown_TextEmbedsSshOneLiner- vérification que la commande SSH complète est insérée dans l’email lorsque l’adresse IP est disponible.Build_HtmlEncodesUserContent- vérification de l’encodage HTML du contenu utilisateur pour prévenir les injections XSS dans le corps email.Handle_WhenWorkSessionAlreadyStarted_ThrowsInvalidOperation- protection contre les doubles démarrages de session.
Détail VmService - périmètre Sprint 4
| Sous-ensemble | Fichiers | Tests |
|---|---|---|
| Sagas (VmStartSaga, VmStopSaga, VmDestroySaga) | 3 | 15 |
| Handlers - StartAll / StopAll / DeleteAll (handler + validator + auth) | 9 | ~26 |
| Handlers - ResetVmCredential (handler + validator + auth) | 3 | 13 |
| Handlers - RetryVmCreation (handler + validator + auth) | 3 | 14 |
| VmStatusHubAuthorizationService | 1 | 12 |
| Total Sprint 4 VmService (unitaires) | 19 | ~80 |
Exemples de cas de test représentatifs :
Handle_OnSuccess_AppliesPasswordViaAgent_StampsResetAndPublishesEvent- vérifie que la réinitialisation appelleSetUserPasswordViaAgentAsyncavec le hash SHA-512, incrémenteCredentialResetCountet publie l’événementVmCredentialIssuedavecIsReset = true.Handle_WhenVmNotRunning_ThrowsInvalidOperation- protection contre les réinitialisations sur une VM non démarrée.
Détail Edukit-Front - périmètre Sprint 4
| Fichier de test | Composant testé | Tests |
|---|---|---|
user-management.spec.ts |
UserManagement |
1 |
4.3 Tests d’infrastructure (VmService)
Les tests d’infrastructure vérifient les adaptateurs vers les systèmes externes (Proxmox HTTP, gRPC, sécurité) en simulant leurs réponses via des handlers HTTP intercepteurs et des mocks gRPC. Aucune connexion réseau réelle n’est établie.
| Composant | Fichiers de test | Tests | Réussis | Échoués |
|---|---|---|---|---|
| VmService - InfrastructureTests (total) | 11 | 89 | 89 | 0 |
| Fichier de test | Composant testé | Tests Sprint 4 (nouveaux) |
|---|---|---|
VmLifecycleServiceTests.cs |
Start/stop Proxmox - happy path, rollback | 6 (nouveau Sprint 4) |
VmLifecycleServiceDestroyTests.cs |
Destruction Proxmox - happy path, VM introuvable | 5 (nouveau Sprint 4) |
VmProvisioningServiceTests.cs |
Orchestration de provisionnement | Préexistant - Sprint 3 |
VmStatusReconcilerTests.cs |
Réconciliation périodique des statuts | Préexistant |
ProxmoxClientTests.cs |
Client HTTP Proxmox - requêtes, erreurs | Préexistant |
ProxmoxThrottlerTests.cs |
Throttling concurrent des opérations | Préexistant |
AesGcmPayloadCipherTests.cs |
Chiffrement / déchiffrement AES-256-GCM | Préexistant |
PasswordGeneratorTests.cs |
Génération de mots de passe sécurisés | Préexistant |
Sha512CryptHasherTests.cs |
Hashage SHA-512 crypt(3) | Préexistant |
GrpcGroupResolutionServiceTests.cs |
Client gRPC - résolution de groupes | Préexistant |
GrpcWorkEnvironmentResolutionServiceTests.cs |
Client gRPC - résolution des environnements | Préexistant |
4.4 Tests manuels
La validation manuelle est réalisée sur l’environnement de développement local avant l’ouverture de chaque PR, conformément à la Phase 3 de la stratégie de test. Les résultats sont documentés dans la section “Testing Notes” de chaque PR.
| Fonctionnalité | Parcours testé | Outil | Résultat | Observations |
|---|---|---|---|---|
| Session de travail - cycle complet | Création → Démarrage → Complétion | Insomnia (collection partagée) | Réussi | Transitions d’état validées |
| Session de travail - annulation | Création → Démarrage → Annulation | Insomnia (collection partagée) | Réussi | |
| VmCredentialIssued - email | Provisionnement d’une VM → réception email | Interface Angular + Mailpit | Réussi | Email reçu avec commande SSH et mot de passe |
| Réinitialisation credential | Reset sur une VM Running → réception email | Insomnia (collection partagée) | Réussi | Compteur CredentialResetCount incrémenté |
| Démarrage batch d’un environnement | Démarrage de toutes les VMs | Insomnia (collection partagée) | Réussi | Mises à jour temps réel via SignalR visibles sur le front |
| Arrêt batch d’un environnement | Arrêt de toutes les VMs | Insomnia (collection partagée) | Réussi | |
| Destruction de toutes les VMs | Suppression batch d’un environnement | Insomnia (collection partagée) | Réussi | VMs passées à l’état Destroyed |
| Retry provisionnement | Déclenchement d’un retry sur une VM Failed |
Insomnia (collection partagée) + Angular | Réussi | VM repassée à Pending puis reprovisionnée |
| UserManagement - affichage | Chargement de la page utilisateurs | Interface Angular (:4200) |
Réussi | Tableau paginé affiché |
| SignalR - temps réel | Démarrage d’une VM depuis le front, observation des transitions | Interface Angular | Réussi | Statut mis à jour sans rechargement de page |
4.5 Analyse statique SonarQube
Les résultats ci-dessous correspondent à l’analyse SonarQube réalisée sur la dernière PR du sprint, fusionnée le 17/05/2026.
| Critère | Résultat | Seuil | Statut |
|---|---|---|---|
| Quality Gate global | Grade A | Grade A | Réussi |
| Couverture de code - OrgService | ≥ 60 % | ≥ 60 % | Réussi |
| Couverture de code - VmService | ≥ 60 % | ≥ 60 % | Réussi |
| Couverture de code - Front | < 40 % | ≥ 40 % (objectif) | Non atteint - non bloquant |
| Nouvelles violations sécurité | 0 | 0 | Réussi |
| Nouvelles violations fiabilité | 0 | 0 | Réussi |
| Nouvelles violations maintenabilité | Informatif | - | Informatif |
| Commentaires SonarQube sur PR traités | Oui | Oui | Réussi |
La couverture frontend est en dessous du seuil objectif de 40 % en raison du faible nombre de tests Angular (4 tests, 2 fichiers) par rapport à la surface du projet. Ce point est connu, non bloquant à ce stade, et adressé dans la feuille de route (voir AN-001).
4.6 Pipeline CI (Azure DevOps)
| Étape | Statut |
|---|---|
| Build (OrgService + VmService + Edukit-Front) | Réussi |
Tests unitaires (dotnet test) |
Réussi |
Tests d’infrastructure (dotnet test) |
Réussi |
Tests frontend (npx ng test - Vitest) |
Réussi |
| Collecte couverture (coverlet → SonarQubeCloud) | Réussi |
| Analyse SonarQube - Quality Gate | Réussi |
5. Anomalies
Conformément aux critères de livraison, aucune anomalie bloquante ou critique ne doit être ouverte à la livraison.
| ID | Description | Composant | Criticité | Statut | Action |
|---|---|---|---|---|---|
| AN-001 | Couverture de test frontend insuffisante : 4 tests pour l’ensemble du projet Angular (guards authGuard, roleGuard, establishmentGuard, services et composants de fonctionnalité non couverts). Les régressions UI ne sont pas détectées automatiquement. Correspond au risque R1 de la stratégie de test. |
Edukit-Front | Mineur | Ouvert | Extension de la couverture Vitest planifiée à court terme : guards en priorité, puis composants des principales pages fonctionnelles. |
| AN-002 | Absence de tests E2E : aucun test de parcours complet utilisateur (connexion Keycloak → provisionnement VM → session de travail) n’est automatisé. Les régressions cross-services ne sont détectées que par les tests manuels. Correspond au risque R2 de la stratégie de test. | Tous les composants | Mineur | Ouvert | Tests E2E (Playwright ou Cypress) planifiés à moyen terme sur les parcours critiques. En attendant, atténué par les tests manuels systématiques avant chaque livraison sprint. |
| AN-003 | Keycloak non couvert par des tests automatisés : les pannes d’authentification (émission de tokens JWT, configuration du realm) ne sont détectées qu’en validation manuelle. Correspond au risque R3 de la stratégie de test. | Tous les composants | Mineur | Ouvert | Validation manuelle systématique avec le compte testadmin avant chaque livraison ; monitoring en staging. Infrastructure externe - non modifiable dans le cadre du projet. |
| AN-004 | Asymétrie entre OrgService (pas de projet InfrastructureTests) et VmService (11 fichiers d’infrastructure). Les adaptateurs gRPC et SMTP de l’OrgService ne sont pas couverts par des tests d’infrastructure. Correspond au risque R5 de la stratégie de test. |
OrgService | Mineur | Ouvert | Ajout d’un projet InfrastructureTests côté OrgService planifié à court terme (clients gRPC, SmtpEmailSender). |
Récapitulatif
| Criticité | Total | Corrigés | Ouverts |
|---|---|---|---|
| Bloquant | 0 | 0 | 0 |
| Critique | 0 | 0 | 0 |
| Majeur | 0 | 0 | 0 |
| Mineur | 4 | 0 | 4 |
6. Conclusion
6.1 Synthèse
Le Sprint 4 a enrichi la plateforme Edu-Kit de fonctionnalités critiques pour le cycle de vie complet des VMs et la communication inter-services. À la date de livraison, la suite automatisée compte 1 030 tests unitaires (répartis sur 184 fichiers) et 89 tests d’infrastructure, soit 1 119 tests automatisés au total. Le Sprint 4 a contribué environ 252 nouveaux tests à cette suite.
L’ensemble des 1 119 tests sont en succès sur les trois composants du projet. Le pipeline CI est au vert sur toutes ses étapes (build, tests, couverture, Quality Gate SonarQube Grade A). La validation manuelle des parcours fonctionnels introduits dans ce sprint a été réalisée sur l’environnement local et s’est conclue sans anomalie fonctionnelle.
Quatre anomalies mineures persistent en open (AN-001 couverture frontend, AN-002 absence d’E2E, AN-003 Keycloak non testé automatiquement, AN-004 asymétrie InfrastructureTests OrgService) ; elles sont toutes connues, identifiées dans la stratégie de test, non bloquantes pour la livraison et trackées dans la feuille de route du projet.
6.2 Recommandation
| Décision | Condition |
|---|---|
| Livraison concluante | Tous les tests unitaires et d’infrastructure passent à 100 %, Quality Gate SonarQube à Grade A, zéro anomalie bloquante ou critique ouverte, validation manuelle des parcours principaux réalisée et documentée dans la PR (section “Testing Notes”), et chaque PR a reçu au moins une approbation de reviewer. |
| Livraison rejetée | Au moins une des conditions ci-dessus n’est pas remplie. |
Décision : Livraison concluante
Tous les critères de livraison définis dans la stratégie de test sont satisfaits. Les fonctionnalités du Sprint 4 - cycle de vie des sessions de travail, communication inter-services par événements (
VmCredentialIssued), sagas de cycle de vie des VMs et opérations batch - ont été validées par des tests automatisés et par une validation manuelle documentée dans chaque PR. Aucune anomalie bloquante ou critique n’est ouverte.
6.3 Évolutions prévues (feuille de route qualité)
Conformément à la section 5.5 de la stratégie de test, les évolutions suivantes sont planifiées pour les prochains sprints :
| Évolution | Priorité | Description |
|---|---|---|
| Tests d’infrastructure OrgService | Court terme | Ajout d’un projet InfrastructureTests pour couvrir les clients gRPC et le SmtpEmailSender (symétrie avec VmService - voir AN-004) |
| Tests de composants Angular | Court terme | Extension de la couverture Vitest aux guards (authGuard, roleGuard, establishmentGuard), services et composants de fonctionnalité (voir AN-001) |
| Tests E2E | Moyen terme | Implémentation de Playwright ou Cypress sur les parcours critiques : connexion Keycloak, provisionnement VM, cycle d’une session de travail (voir AN-002) |
7. Lexique
| Terme | Définition |
|---|---|
| CQRS | Command Query Responsibility Segregation - pattern séparant les opérations d’écriture (Commands) des opérations de lecture (Queries) |
| Clean Architecture | Architecture logicielle organisant le code en couches concentriques (Domain → Application → Infrastructure → API) avec des dépendances orientées vers l’intérieur |
| MediatR | Bibliothèque .NET implémentant le pattern Mediator ; les handlers sont découplés de leurs appelants via des messages typés |
| Mock | Objet simulé remplaçant une dépendance réelle lors d’un test, permettant de contrôler son comportement et de vérifier les interactions |
| Moq | Bibliothèque .NET de création de mocks utilisée dans les tests unitaires et d’infrastructure |
| FluentValidation | Bibliothèque .NET de validation de modèles basée sur des règles chaînées et expressives |
| FluentAssertions | Bibliothèque .NET proposant une syntaxe d’assertions lisible (result.Should().Be(...)) |
| xUnit | Framework de test unitaire pour .NET |
| Vitest | Framework de test JavaScript/TypeScript léger, compatible avec l’écosystème Vite/Angular |
| jsdom | Implémentation JavaScript du DOM du navigateur pour Node.js, permettant de tester des composants Angular sans navigateur réel |
| Angular TestBed | Module Angular permettant l’instanciation de composants dans un environnement de test isolé |
| Quality Gate | Ensemble de critères de qualité configurés dans SonarQube dont le non-respect bloque le merge |
| CI/CD | Continuous Integration / Continuous Delivery - automatisation du build, des tests et du déploiement |
| Saga | Pattern de gestion de processus longs et distribués via une séquence d’étapes avec compensation sur échec |
| Wolverine | Bibliothèque .NET de messaging (RabbitMQ) et d’implémentation de sagas utilisée dans le VmService et l’OrgService |
| gRPC | Protocole d’appel de procédure à distance haute performance basé sur HTTP/2 et Protocol Buffers |
| SignalR | Bibliothèque ASP.NET Core permettant des communications temps réel entre serveur et clients (WebSocket) |
| OIDC / PKCE | OpenID Connect / Proof Key for Code Exchange - flux d’authentification sécurisé utilisé par Keycloak |
| Proxmox VE | Hyperviseur open-source de virtualisation (VMs KVM) |
| AES-256-GCM | Algorithme de chiffrement symétrique authentifié utilisé pour le transport sécurisé du credential VM entre VmService et OrgService |
| qemu-guest-agent | Agent s’exécutant dans la VM permettant à l’hyperviseur (Proxmox) d’envoyer des commandes au système invité, notamment set-user-password |
| E2E | End-to-End - test du parcours complet d’un utilisateur à travers toutes les couches du système |
| SPA | Single Page Application - application web dont le rendu est géré côté client (Angular dans ce projet) |
| Boîte blanche | Technique de test où le testeur a connaissance de l’implémentation interne - utilisée pour les tests unitaires et d’infrastructure |
| Boîte noire | Technique de test où le testeur se base uniquement sur les entrées/sorties sans connaître le code - utilisée pour les tests manuels Insomnia (collection partagée) et interface Angular |