L'epreuve du colis sur le runner de Technolibre : git bundle verify exige un depot existant, et l'insemination est le cas ou il n'existe pas encore. Le clone verifie le colis lui-meme ; un depot existant le verifie avant de tirer. Les colis restes d'un passage interrompu sont retires. make forge-cles rend aussi chaque depot prive ou public selon le role que lui donne le plan du site, et seulement une fois les cles de lecture en place. 95 preuves. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
90 lines
3.7 KiB
Python
90 lines
3.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Le plan de `forge_cles.py` : ajouter la cle publiee, retirer la perimee, refuser l'ecriture.
|
|
|
|
Pur : aucun appel a la forge. Ce que le script ECRIT est rendu par `plan()` ; s'il se trompe
|
|
ici, il se trompe sur la forge — c'est donc ici qu'on l'epingle.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "scripts"))
|
|
import forge_cles as fc # noqa: E402
|
|
|
|
CLE = "ssh-ed25519 AAAALECTURE"
|
|
AUTRE = "ssh-ed25519 AAAAANCIENNE"
|
|
SITE = "ssh-ed25519 AAAASITE"
|
|
|
|
|
|
def voulue(depot="ops-essai", cle=CLE):
|
|
return {"locataire": "OPS-Essai", "depot": depot, "cle": cle}
|
|
|
|
|
|
class TestPlan(unittest.TestCase):
|
|
def test_une_cle_absente_s_ajoute(self):
|
|
a, r, x = fc.plan([voulue()], {"ops-essai": []})
|
|
self.assertEqual((len(a), r, x), (1, [], []))
|
|
|
|
def test_une_cle_deja_la_ne_change_rien(self):
|
|
cles = [{"id": 1, "title": fc.titre_de("OPS-Essai"), "key": CLE + " setops@ops-01", "read_only": True}]
|
|
self.assertEqual(fc.plan([voulue()], {"ops-essai": cles}), ([], [], []))
|
|
|
|
def test_une_cle_perimee_sous_le_meme_titre_se_retire(self):
|
|
cles = [{"id": 7, "title": fc.titre_de("OPS-Essai"), "key": AUTRE, "read_only": True}]
|
|
a, r, x = fc.plan([voulue()], {"ops-essai": cles})
|
|
self.assertEqual(len(a), 1)
|
|
self.assertEqual([y["id"] for y in r], [7])
|
|
|
|
def test_la_cle_du_runner_du_site_n_est_jamais_touchee(self):
|
|
cles = [{"id": 3, "title": "runner du site — site-ops-01", "key": SITE, "read_only": False}]
|
|
a, r, x = fc.plan([voulue()], {"ops-essai": cles})
|
|
self.assertEqual(r, [], "la cle d'ecriture du site n'est pas une cle de lecture perimee")
|
|
|
|
def test_une_cle_de_lecture_en_ecriture_est_refusee(self):
|
|
cles = [{"id": 4, "title": "autre", "key": CLE, "read_only": False}]
|
|
a, r, x = fc.plan([voulue()], {"ops-essai": cles})
|
|
self.assertEqual((a, r), ([], []))
|
|
self.assertEqual(len(x), 1)
|
|
|
|
def test_une_face_sans_cle_est_refusee(self):
|
|
a, r, x = fc.plan([voulue(cle="")], {})
|
|
self.assertEqual((a, r, len(x)), ([], [], 1))
|
|
|
|
|
|
class TestVisibilite(unittest.TestCase):
|
|
def test_seuls_les_ecarts_sont_bascules(self):
|
|
voulues = {"set-ops-public": False, "ops-essai": True, "site-essai": True}
|
|
actuelles = {"set-ops-public": False, "ops-essai": False, "site-essai": True}
|
|
self.assertEqual(fc.plan_visibilite(voulues, actuelles), [("ops-essai", True)])
|
|
|
|
def test_un_depot_introuvable_n_est_pas_bascule(self):
|
|
self.assertEqual(fc.plan_visibilite({"absent": True}, {}), [])
|
|
|
|
def test_un_public_redevient_public(self):
|
|
self.assertEqual(fc.plan_visibilite({"set-ops-public": False}, {"set-ops-public": True}),
|
|
[("set-ops-public", False)])
|
|
|
|
|
|
class TestClassement(unittest.TestCase):
|
|
"""`forge_etancheite` : un refus RESEAU n'est jamais lu comme une protection."""
|
|
|
|
def test_https(self):
|
|
import forge_etancheite as fe
|
|
self.assertEqual(fe.classer_https(0, ""), "lu")
|
|
self.assertEqual(fe.classer_https(128, "fatal: could not read Username for 'https://x'"),
|
|
"authentification")
|
|
self.assertEqual(fe.classer_https(128, "fatal: unable to access: Connection timed out"), "reseau")
|
|
|
|
def test_ssh(self):
|
|
import forge_etancheite as fe
|
|
self.assertEqual(fe.classer_ssh(0, ""), "lu")
|
|
self.assertEqual(fe.classer_ssh(1, "Forgejo: Deploy Key: 4 is not authorized to read genome/x"),
|
|
"refuse")
|
|
self.assertEqual(fe.classer_ssh(1, "ssh: connect to host 10.37.33.11 port 22: No route to host"),
|
|
"reseau")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main(verbosity=2)
|