-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_detecteur.py
More file actions
74 lines (56 loc) · 2.48 KB
/
test_detecteur.py
File metadata and controls
74 lines (56 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import sys
import time
import unittest
from pathlib import Path
# Autoriser les imports depuis src/
sys.path.append(str(Path(__file__).resolve().parents[1]))
from src.detecteur_crypto import DetecteurCryptoOrchestrateur, ResultatAnalyse
class FakeProgress:
"""
Progress factice pour les tests.
Fournit les mêmes méthodes que rich.Progress utilisées dans le code,
mais sans aucun effet de bord (pas d'affichage, pas de timing).
"""
def add_task(self, description: str, total: int = 100):
return 1 # identifiant quelconque
def update(self, task_id=None, description: str = "", advance: float = 0.0):
pass
def remove_task(self, task_id):
pass
class DetecteurCryptoTests(unittest.TestCase):
"""
Tests unitaires pour l'orchestrateur: vérifie les retours et la robustesse
des appels les plus utilisés, sans dépendre de l'affichage.
"""
def setUp(self) -> None:
self.orchestrateur = DetecteurCryptoOrchestrateur()
self.progress = FakeProgress()
self.wordlist = "keys/wordlist.txt"
def test_analyser_fichier_specifique_type(self):
"""
Vérifie que l'analyse d'un fichier retourne un ResultatAnalyse
et ne lève pas d'exception avec une Progress factice.
"""
resultat = self.orchestrateur.analyser_fichier_specifique(
"mission1.enc", progress=self.progress, task=self.progress.add_task("t"), error=False, nbr_opr_mission=4
)
self.assertIsInstance(resultat, ResultatAnalyse)
self.assertIsInstance(resultat.score_probabilite, float)
self.assertIsInstance(resultat.nb_tentatives, int)
def test_mission_complete_automatique_sans_exception(self):
"""
Vérifie qu'une mission complète ne plante pas et retourne une liste
de ResultatAnalyse. Le contenu exact dépend de data/.
"""
dossier_data = Path("data")
if not dossier_data.exists():
self.skipTest("Dossier data/ introuvable pour le test d'intégration léger.")
resultats = self.orchestrateur.mission_complete_automatique(str(dossier_data), self.wordlist)
self.assertIsInstance(resultats, list)
for r in resultats:
self.assertIsInstance(r, ResultatAnalyse)
self.assertIsInstance(r.algo, str)
self.assertIsInstance(r.score_probabilite, float)
# On n'impose pas de borne de durée pour éviter un test fragile.
if __name__ == "__main__":
unittest.main()