Files
SQS-service/doc/thinking/tests-inherited-broken-2026-10-06.md
T
Repinoid ac06572e25 doc: находка — унаследованные Go-тесты gosqs мёртвые (несовместимы с форком)
Тесты требуют тенанта из контекста и tenant-scoped ключей, а написаны под
дофорковый GoAws. Восстановление app/fixtures + app/test сделает их
компилируемыми, но падающими. Нужны новые тесты под мультитенантное поведение.
2026-10-06 18:07:31 +03:00

57 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Находка: унаследованные Go-тесты gosqs сломаны форком (2026-10-06)
> Статус: подтверждено чтением кода. Меняет ранее данную рекомендацию.
## Факт 1 — тесты не компилируются
Все 13 файлов `app/gosqs/*_test.go` импортируют два пакета, которых НЕТ в репо
(и никогда не было в git — проверено `git ls-files`, `git log --all`):
- `shared-sqs/app/fixtures` (тестовые данные GoAws: `BASE_URL`, `QueueName`,
`LOCAL_ENVIRONMENT`, `CreateQueueRequest`, `FullyPopulatedQueue` и др.)
- `shared-sqs/app/test` (`GenerateRequestInfo`)
Оба — из upstream `github.com/Admiral-Piett/goaws`.
## Факт 2 — даже с восстановленными пакетами тесты ПАДАЮТ
Тесты унаследованы от дофоркового GoAws и не адаптированы к мультитенантному форку:
1. **Нет тенанта в контексте.** Все хендлеры начинаются с
`t := getTenantFromContext(req); if t == nil { return InvalidClientTokenId }`
(напр. `app/gosqs/create_queue.go:44-47`). Тесты вызывают хендлер без
`auth.TenantContextKey` в контексте → тенант `nil` → ответ 403
`InvalidClientTokenId`, тогда как тесты ожидают `http.StatusOK` (200).
→ Любой такой assert падает.
2. **Ключ очереди теперь tenant-scoped.** Код хранит очереди под ключом
`{accessKey}:{queueName}` (`tenantQueueKey`, `tenant_helpers.go:20`), а тесты
читают `models.SyncQueues.Queues[fixtures.QueueName]` — по «голому» имени,
без префикса → ключ не найден (`actualQueue == nil`), assert падает.
3. **URL/ARN содержат tenantID**, а не accountID
(`tenantQueueURL`/`tenantQueueARN`) — ожидания тестов про URL/ARN тоже не совпадут.
## Вывод
Это **мёртвые тесты**: они не просто не собираются — они тестируют поведение
ДО форка и принципиально несовместимы с текущим мультитенантным кодом.
Наличие `fixtures`+`test` проблему НЕ решает (будет компилироваться, но краснеть).
## Что это значит для плана
- Прежняя рекомендация «сначала восстановить fixtures → зелёные тесты → P1.1»
**ошибочна**. Пакеты восстановить можно (исходники upstream получены), но
тесты всё равно не пройдут.
- Правильный путь: **не воскрешать мёртвые тесты, а написать НОВЫЕ** — для
текущего мультитенантного поведения (тенант в контексте, tenant-scoped ключи).
Либо удалить унаследованные, либо переписать их в мультитенантном виде.
- Пункт P1.1 (per-queue mutex) требует тестов на конкурентный доступ — их надо
писать с нуля под текущую архитектуру.
## Источники
- `app/gosqs/create_queue.go:44-47` — требование тенанта из контекста.
- `app/gosqs/create_queue.go:52` — `key := tenantQueueKey(t.AccessKey, queueName)`.
- `app/gosqs/tenant_helpers.go:20` — формат ключа `{accessKey}:{queueName}`.
- `app/gosqs/create_queue_test.go:38` — `Queues[fixtures.QueueName]` без префикса.
- `git ls-files 'app/fixtures*' 'app/test*'` — пакеты отсутствуют в истории.