Files

3.7 KiB
Raw Permalink Blame History

Validation du lot #2

Le protocole reproductible est bash tests/run.sh. Il installe l'archive livrée et redémarre un Jellyfin jetable, sans modifier les fichiers de Jellyfin Web.

Environnement

  • Serveur relevé par System/Info/Public : 12.0.0.
  • Image : jellyfin/jellyfin:12.0, digest sha256:baba630419915985442f315f08b0cf46d9f4c8a0cc4bd38e94a6d35751dd5ef5.
  • Plugin : 0.1.0, .NET 10, référence Jellyfin.Controller 12.0.0.
  • Lecteur principal : Jellyfin Web livré dans cette image, Chromium 149.0.7827.55 (Playwright 1.61.1), vitesse 1×, vidéo H.264/AAC avec timecode incrusté.
  • Compagnon : contextes Chromium séparés, fenêtre de 375 × 812 pixels.
  • Comptes ordinaires : compagnon-alice et compagnon-bob ; le script vérifie IsAdministrator == false. compagnon-admin ne sert qu'à la préparation.
  • Hébergement testé : HTTP sur boucle locale, sans préfixe puis /jellyfin. HTTPS/reverse proxy distant et les autres lecteurs n'ont pas été testés.

Contrats observés

Les API existantes suffisent à ce lot sur ce serveur. Aucun accès interne aux sessions ni route de données supplémentaire n'a été ajouté.

GET /Sessions sans authentification est refusé (401). Le jeton de Bob ne permet pas de demander Sessions?controllableByUserId=<Alice> ni Users/<Alice>/Items (403). Pendant les lectures d'Alice, le compagnon de Bob reste sans lecture. Ces refus sont vérifiés par HTTP, indépendamment du rendu de l'interface.

La sélection automatique d'une lecture, le choix initial parmi deux lectures, la conservation de la sélection à l'arrivée d'une seconde session, la pause et la fin réelle du média sont vérifiés dans des navigateurs distincts. Les tests attendent que video.currentTime avance réellement avant de vérifier le compagnon. La fin est provoquée par déplacement du lecteur principal près de la fin du média.

Le journal des requêtes du navigateur compagnon pendant le suivi ne contient que des GET /Sessions : aucun téléchargement vidéo ni commande de lecture. Le média et la source retournée par PlayState.MediaSourceId sont affichés sans récupérer une autre source. La position reste explicitement une estimation serveur.

Vérifications

Exécution complète du 14 septembre 2026 : bash tests/run.sh, code de sortie 0.

Vérification Résultat
Compilation C# Release 0 erreur, 0 avertissement
Typechecking JavaScript Réussi
Paquet installé, accès sans préfixe 1 test réussi
Suite complète sous /jellyfin 4 tests réussis, 0 échec (16,4 s)
Comptes distincts et refus HTTP 401/403 Réussi
Lecture réelle, zéro/une/deux sessions, choix stable, pause et fin Réussi
Panne réseau, détails effacés, sélection bloquée et reprise Réussi
HTTP non sécurisé, clavier, largeur 375 px, absence de stockage du jeton Réussi
Archive et SHA-256 comparés au DLL compilé Réussi

Les conteneurs d'essai ont été supprimés. Les objectifs de précision du lot #6 ne sont pas mesurés ni revendiqués par ce lot.

Revue Standards

Aucune violation documentée ni complexité injustifiée relevée. Le défaut initial sur HTTP non sécurisé (crypto.randomUUID) a été corrigé par getRandomValues et couvert par un navigateur utilisant un nom d'hôte local non sécurisé. Constats restants : 0.

Revue Spec

Deux constats corrigés : désactivation du sélecteur lors d'une panne pour éviter le réaffichage de données périmées, et inspection directe de la réponse HTTP de Bob pendant la lecture d'Alice pour ne pas dépendre du filtrage d'affichage. Les corrections ont fait l'objet d'une seconde vérification ciblée. Constats restants : 0.