From ac06572e255c8bffb162038b45bacdd271552f80 Mon Sep 17 00:00:00 2001 From: Repinoid Date: Tue, 6 Oct 2026 18:07:31 +0300 Subject: [PATCH] =?UTF-8?q?doc:=20=D0=BD=D0=B0=D1=85=D0=BE=D0=B4=D0=BA?= =?UTF-8?q?=D0=B0=20=E2=80=94=20=D1=83=D0=BD=D0=B0=D1=81=D0=BB=D0=B5=D0=B4?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20Go-=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D1=8B=20gosqs=20=D0=BC=D1=91=D1=80=D1=82=D0=B2?= =?UTF-8?q?=D1=8B=D0=B5=20(=D0=BD=D0=B5=D1=81=D0=BE=D0=B2=D0=BC=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D0=BC=D1=8B=20=D1=81=20=D1=84=D0=BE=D1=80?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Тесты требуют тенанта из контекста и tenant-scoped ключей, а написаны под дофорковый GoAws. Восстановление app/fixtures + app/test сделает их компилируемыми, но падающими. Нужны новые тесты под мультитенантное поведение. --- .../tests-inherited-broken-2026-10-06.md | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 doc/thinking/tests-inherited-broken-2026-10-06.md diff --git a/doc/thinking/tests-inherited-broken-2026-10-06.md b/doc/thinking/tests-inherited-broken-2026-10-06.md new file mode 100644 index 0000000..969dd21 --- /dev/null +++ b/doc/thinking/tests-inherited-broken-2026-10-06.md @@ -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*'` — пакеты отсутствуют в истории.