закрыта задача http-handler-tests-never-green
This commit is contained in:
@@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
## Очередь
|
## Очередь
|
||||||
|
|
||||||
- [🐞 Починить тесты http-обработчика, ни разу не бывшие зелёными](items/http-handler-tests-never-green.md) — go test ./... падает на master: тесты требуют файла, которого нет в репозитории, и ждут 201 от ffprobe, которому скормили строку.
|
|
||||||
- [🧹 Сравнивать доменные ошибки через errors.As](items/errors-as-instead-of-typecast.md) — NoopJobError и JobNotFoundError проверяются приведением типа: первая же обёртка %w между слоями сломает проверку молча.
|
- [🧹 Сравнивать доменные ошибки через errors.As](items/errors-as-instead-of-typecast.md) — NoopJobError и JobNotFoundError проверяются приведением типа: первая же обёртка %w между слоями сломает проверку молча.
|
||||||
- [🧹 Задать таймауты обращениям к внешним сервисам](items/external-call-timeouts.md) — Ни у Telegram, ни у Object Storage, ни у SpeechKit нет таймаута: молчащий собеседник держит шаг конвейера до истечения часового захвата.
|
- [🧹 Задать таймауты обращениям к внешним сервисам](items/external-call-timeouts.md) — Ни у Telegram, ни у Object Storage, ни у SpeechKit нет таймаута: молчащий собеседник держит шаг конвейера до истечения часового захвата.
|
||||||
- [🔬 Очередь задач: своя таблица или готовая библиотека](items/job-queue-choice.md) — Очередь написана вручную: захват двумя запросами без транзакции, протухание временем, опрос раз в секунду вхолостую тремя воркерами.
|
- [🔬 Очередь задач: своя таблица или готовая библиотека](items/job-queue-choice.md) — Очередь написана вручную: захват двумя запросами без транзакции, протухание временем, опрос раз в секунду вхолостую тремя воркерами.
|
||||||
|
|||||||
@@ -1,57 +0,0 @@
|
|||||||
# 🐞 Починить тесты http-обработчика, ни разу не бывшие зелёными
|
|
||||||
|
|
||||||
- **Тип:** fix
|
|
||||||
- **Категория:** Очередь
|
|
||||||
- **Зачем:** go test ./... падает на master: тесты требуют файла, которого нет в репозитории, и ждут 201 от ffprobe, которому скормили строку.
|
|
||||||
|
|
||||||
Тесты заведены коммитом `87d8b05` и с тех пор ни разу не проходили: файл
|
|
||||||
`internal/controller/http/testdata/sample.m4a` в git не попадал никогда, а
|
|
||||||
`.gitignore` строкой `*.m4a` и не даст его закоммитить. Остальные случаи
|
|
||||||
записывают в файл строку `test audio content` и ждут `201`, тогда как обработчик
|
|
||||||
зовёт настоящий `ffprobe`, который такой вход отвергает, — получается `500`.
|
|
||||||
|
|
||||||
Отсюда следствие важнее самих тестов: **красный `go test` перестал что-либо
|
|
||||||
значить**, и любой настоящий отказ в этом пакете теперь неотличим от привычного
|
|
||||||
шума.
|
|
||||||
|
|
||||||
Заодно тесты зовут `os.Chdir`, то есть меняют состояние всего процесса: гонять
|
|
||||||
их параллельно нельзя, а `errcheck` на этих вызовах молчит только потому, что
|
|
||||||
`_test.go` вынесен в исключения `.golangci.yml`.
|
|
||||||
|
|
||||||
## Воспроизведение
|
|
||||||
|
|
||||||
```
|
|
||||||
go test ./internal/controller/http/
|
|
||||||
```
|
|
||||||
|
|
||||||
Отказов четыре: `TestCreateTranscribeJob_Success` не находит
|
|
||||||
`testdata/sample.m4a`; `TestCreateTranscribeJob_EmptyFile` и три случая
|
|
||||||
`TestCreateTranscribeJob_DifferentFileExtensions` получают `500` вместо `201` с
|
|
||||||
`ffprobe execution failed: exit status 1` в логе.
|
|
||||||
|
|
||||||
## Затрагивает
|
|
||||||
|
|
||||||
- `internal/controller/http/transcribe_test.go` целиком;
|
|
||||||
- `.gitignore`, строка `*.m4a` — она же мешает положить настоящую запись в
|
|
||||||
`testdata`;
|
|
||||||
- `internal/contract`, `AudioMetaViewer` — подставной вместо настоящего
|
|
||||||
`ffprobe` в тестах;
|
|
||||||
- `.golangci.yml`, исключение `errcheck` для `_test.go`, если `os.Chdir` уйдёт.
|
|
||||||
|
|
||||||
## Критерии приёмки
|
|
||||||
|
|
||||||
- `go test ./...` зелёный на чистом клоне без ручной подготовки файлов. Оракул —
|
|
||||||
`git clone` во временный каталог и `go test ./...`.
|
|
||||||
- Тест приёма не зависит от установленного `ffprobe`: метаданные даёт подставной
|
|
||||||
`AudioMetaViewer`. Оракул — прогон с временно переименованным `ffprobe` в
|
|
||||||
`PATH`.
|
|
||||||
- Отказ разбора метаданных проверяется отдельным случаем и ожидает `500`, а не
|
|
||||||
`201`. Оракул — тот же тест на подставном, возвращающем ошибку.
|
|
||||||
- Тесты не меняют рабочий каталог процесса. Оракул — `grep -n 'os.Chdir'
|
|
||||||
internal/controller/http/transcribe_test.go` пуст.
|
|
||||||
|
|
||||||
## Рамки
|
|
||||||
|
|
||||||
Поведение обработчика не меняем: задача про тесты. Если по ходу выяснится, что
|
|
||||||
`500` на негодный файл — неверный ответ, это отдельная задача про трансляцию
|
|
||||||
доменной ошибки.
|
|
||||||
Reference in New Issue
Block a user