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

3.9 KiB
Raw Blame History

Находка: унаследованные 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*' — пакеты отсутствуют в истории.