- проверки больше не зовут ffprobe и не меняют рабочий каталог процесса; добавлены случаи на отказ чтения метаданных и на отсутствие поля audio - заведена спека intake на приём по HTTP, ADR о подставных адаптерах, запись в журнал ревью о проверке, которая не могла упасть - go test снят из объявленных долгов CLAUDE.md, послабление errcheck для _test.go в .golangci.yml убрано
3.8 KiB
Проверки не зовут внешних программ
- Дата: 2026-08-11
- Источник: openspec/changes/archive/2026-08-11-fix-http-handler-tests/design.md
Решение
Тесты приёма получают длительность записи от подставного источника метаданных, а
не от ffprobe. Годность содержимого судит адаптер, тест судит наш код.
Почему
Цитата из источника, раздел Decisions:
проверять приём сквозь настоящий
ffprobe. Отвергнуто: это проверка внешней программы, а не нашего кода. Она найдёт отказffprobeи не найдёт ошибку в приёме — ровно наоборот тому, зачем эти тесты писались.
Отвергнуты там же два очевидных пути, и оба по записанным правилам проекта, а не по вкусу:
положить настоящую запись в
testdata. Отвергнуто дважды:.gitignoreстрокой*.m4aеё не пустит, аCLAUDE.mdпрямо говорит, чтоtestdataв проекте нет и тесты создают нужное во временном каталоге. Снимать запрет ради теста — менять правило проекта под удобство одного файла;порождать запись
ffmpegпрямо в тесте. Отвергнуто: проверка приёма начинает требовать установленныхffmpegиffprobe, а критерий приёмки требует обратного — прогона сffprobe, убранным изPATH.
Решение попадает в журнал как намеренный отказ от очевидного подхода: файл с
настоящей записью в testdata — первое, что сделал бы человек, и отказ от него
из кода не виден.
Последствия
+прогон проверок на чистом клоне зелёный без подготовки файлов руками и без установленных внешних программ. Проверено сборкой тестового бинарника и прогоном подenv -i PATH=<пустой каталог>.+ветка отказа чтения метаданных впервые проверяема: подставной источник умеет вернуть ошибку, настоящийffprobeпо заказу не отказывает.+проверки не держат состояния процесса: каталог хранения задаётся снаружи,os.Chdirушёл, и параллельный прогон перестал быть запрещённым.−разбор вывода настоящегоffprobeне проверяется ничем: своего теста уinternal/adapter/metaviewer/ffmpegнет. Формально покрытие не потеряно — прежние проверки звали его так, что он всегда отказывал, — но дыра теперь наша и записана в ../review.md, «Перестали проверять сознательно».−правило распространяется на будущие проверки: узел, чья работа и есть обращение к внешней программе, придётся проверять иначе, и чем — здесь не решено.