@@ -26,27 +26,54 @@ jobs:
2626 - run : pip install bandit
2727 - run : bandit -r honeypots/ pipeline/ dashboard/ -ll -ii
2828
29+ # Tests unitaires PAR COMPOSANT. Les honeypots embarquent des modules à plat
30+ # (config.py, events.py, server.py, detection.py) avec des noms IDENTIQUES
31+ # entre ssh et ftp : les lancer dans le même process pytest provoque des
32+ # collisions de modules top-level. On exécute donc chaque suite isolément,
33+ # dans son propre dossier — exactement comme l'image Docker les importe
34+ # (WORKDIR /app, `python server.py`). L'attacker tourne depuis la racine
35+ # (son module local `logging.py` masquerait la stdlib autrement).
2936 test :
3037 needs : lint
3138 runs-on : ubuntu-latest
39+ strategy :
40+ fail-fast : false
41+ matrix :
42+ include :
43+ - name : honeypot-ssh
44+ dir : honeypots/ssh
45+ target : tests/
46+ - name : honeypot-ftp
47+ dir : honeypots/ftp
48+ target : tests/
49+ - name : honeypot-http
50+ dir : honeypots/http
51+ target : tests/
52+ - name : analyzer
53+ dir : analyzer
54+ target : tests/
55+ - name : attacker
56+ dir : .
57+ target : attacker/tests/
3258 steps :
3359 - uses : actions/checkout@v4
34-
35- - name : Set up Python 3.12
36- uses : actions/setup-python@v5
60+ - uses : actions/setup-python@v5
3761 with :
3862 python-version : " 3.12"
39-
40- - name : Install dependencies
63+ - name : Install test deps (${{ matrix.name }})
64+ working-directory : ${{ matrix.dir }}
4165 run : |
42- pip install --upgrade pip
43- pip install pytest
44- find . -name "requirements*.txt" \
45- -not -path "./.git/*" \
46- | xargs -I {} pip install -r {}
47-
48- - name : Run all tests
49- run : pytest --tb=short -v
66+ python -m pip install --upgrade pip
67+ if [ -f requirements-dev.txt ]; then
68+ pip install -r requirements-dev.txt
69+ else
70+ pip install pytest
71+ fi
72+ - name : pytest (${{ matrix.name }})
73+ working-directory : ${{ matrix.dir }}
74+ # `python -m pytest` met le cwd sur sys.path => imports à plat OK,
75+ # comme en conteneur. Pas de pytest.ini racine (collecte globale = collisions).
76+ run : python -m pytest ${{ matrix.target }} -q
5077
5178 # Valide que les secrets d'enrichissement sont montes et fonctionnels
5279 # (AbuseIPDB, GreyNoise) sans monter la stack.
0 commit comments