doc: находка — унаследованные Go-тесты gosqs мёртвые (несовместимы с форком)

Тесты требуют тенанта из контекста и tenant-scoped ключей, а написаны под
дофорковый GoAws. Восстановление app/fixtures + app/test сделает их
компилируемыми, но падающими. Нужны новые тесты под мультитенантное поведение.
This commit is contained in:
Repinoid
2026-10-06 18:07:31 +03:00
parent 12b25e393d
commit ac06572e25
@@ -0,0 +1,56 @@
# Находка: унаследованные 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*'` — пакеты отсутствуют в истории.