"""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()