- проверки больше не зовут ffprobe и не меняют рабочий каталог процесса; добавлены случаи на отказ чтения метаданных и на отсутствие поля audio - заведена спека intake на приём по HTTP, ADR о подставных адаптерах, запись в журнал ревью о проверке, которая не могла упасть - go test снят из объявленных долгов CLAUDE.md, послабление errcheck для _test.go в .golangci.yml убрано
52 lines
3.8 KiB
Markdown
52 lines
3.8 KiB
Markdown
# Проверки не зовут внешних программ
|
||
|
||
- **Дата:** 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](../review.md), «Перестали проверять
|
||
сознательно».
|
||
- `−` правило распространяется на будущие проверки: узел, чья работа и есть
|
||
обращение к внешней программе, придётся проверять иначе, и чем — здесь не
|
||
решено.
|