Тесты требуют тенанта из контекста и tenant-scoped ключей, а написаны под дофорковый GoAws. Восстановление app/fixtures + app/test сделает их компилируемыми, но падающими. Нужны новые тесты под мультитенантное поведение.
57 lines
3.9 KiB
Markdown
57 lines
3.9 KiB
Markdown
# Находка: унаследованные 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*'` — пакеты отсутствуют в истории.
|