Files
li/tests/test_li_gen.py
k3nnyandClaude Opus 5.5 1e63e4fe80 Bibliothèque vidéo partagée par URL signées
Extrait de li.k3nny.fr et rendu indépendant du serveur : toute la
configuration propre à l'hôte passe par li.env (URL publique, chemins,
expiration, répertoires « HTML seulement », commande nginx).

Écarts avec la version en production :
- li-user del retire aussi la page .html, pas seulement le .xspf ;
- li-gen ignore les répertoires cachés, pas seulement les fichiers ;
- textes de la page HTML accentués.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 10:06:08 +02:00

41 lines
1.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""python3 -m unittest discover tests"""
import importlib.machinery
import importlib.util
import subprocess
import unittest
from pathlib import Path
_chargeur = importlib.machinery.SourceFileLoader(
"li_gen", str(Path(__file__).resolve().parent.parent / "bin" / "li-gen"))
_spec = importlib.util.spec_from_loader("li_gen", _chargeur)
li_gen = importlib.util.module_from_spec(_spec)
_chargeur.exec_module(li_gen)
class Signature(unittest.TestCase):
def test_identique_a_openssl(self):
# Ce que calcule li-user, donc ce que verifie secure_link_md5.
chemin, secret = "/library/movies/Été à Paris/The Janitor’s Boy.mkv", "abc123"
brut = f"2145916800{chemin}{secret}"
attendu = subprocess.run(
["sh", "-c", "printf '%s' \"$1\" | openssl md5 -binary | openssl base64 "
"| tr '+/' '-_' | tr -d '='", "sh", brut],
check=True, capture_output=True, text=True).stdout.strip()
self.assertEqual(li_gen.signe(chemin, 2145916800, secret), attendu)
def test_signe_le_chemin_decode(self):
cfg = li_gen.Config({"LI_BASE_URL": "https://li.example.org/"})
u = li_gen.url(cfg, "/library/a b’c.mkv", "alice", "s3cret")
self.assertTrue(u.startswith("https://li.example.org/library/a%20b%E2%80%99c.mkv?"))
self.assertTrue(u.endswith("&s=" + li_gen.signe("/library/a b’c.mkv", 2145916800, "s3cret")))
class Configuration(unittest.TestCase):
def test_base_obligatoire(self):
with self.assertRaises(SystemExit):
li_gen.Config({})
if __name__ == "__main__":
unittest.main()