Тесты требуют тенанта из контекста и tenant-scoped ключей, а написаны под дофорковый GoAws. Восстановление app/fixtures + app/test сделает их компилируемыми, но падающими. Нужны новые тесты под мультитенантное поведение.
3.9 KiB
Находка: унаследованные 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 и не адаптированы к мультитенантному форку:
-
Нет тенанта в контексте. Все хендлеры начинаются с
t := getTenantFromContext(req); if t == nil { return InvalidClientTokenId }(напр.app/gosqs/create_queue.go:44-47). Тесты вызывают хендлер безauth.TenantContextKeyв контексте → тенантnil→ ответ 403InvalidClientTokenId, тогда как тесты ожидаютhttp.StatusOK(200). → Любой такой assert падает. -
Ключ очереди теперь tenant-scoped. Код хранит очереди под ключом
{accessKey}:{queueName}(tenantQueueKey,tenant_helpers.go:20), а тесты читаютmodels.SyncQueues.Queues[fixtures.QueueName]— по «голому» имени, без префикса → ключ не найден (actualQueue == nil), assert падает. -
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*'— пакеты отсутствуют в истории.