doc: находка — унаследованные Go-тесты gosqs мёртвые (несовместимы с форком)
Тесты требуют тенанта из контекста и tenant-scoped ключей, а написаны под дофорковый GoAws. Восстановление app/fixtures + app/test сделает их компилируемыми, но падающими. Нужны новые тесты под мультитенантное поведение.
This commit is contained in:
@@ -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*'` — пакеты отсутствуют в истории.
|
||||||
Reference in New Issue
Block a user