gendesign/backend/tests/services
bot-backend 7e21ff2af9
All checks were successful
CI Trade-In / changes (pull_request) Successful in 17s
CI / changes (pull_request) Successful in 17s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m58s
CI Trade-In / backend-tests (pull_request) Successful in 5m15s
CI / backend-tests (pull_request) Successful in 16m3s
test(ci): развести «нагрузку не создать» и «защита сломана» в двух гейтах (#2783)
Оба теста красили ЧУЖИЕ PR-ы по таймингу раннера, а на правиле «зелёный CI =
можно мержить» здесь держится весь самомерж. Диагнозы разные, поэтому и правки
разные.

1) tradein auth-флуд (`test_login_flood_capped_by_rate_…`). Утверждение про
потолок верное — подводило ПРЕДУСЛОВИЕ `len(codes) > connections`: «каждое из ста
соединений успело сходить дважды за секунду» мерит скорость раннера, а не
нагрузку. На занятом первый круг из ста запросов сам съедает всю секунду, и
невыполненное предусловие давало красный, неотличимый от настоящей поломки
потолка. Замер: свободная машина — 0 падений из 20 (~800 ответов/с), под load
average ~185 — 10 из 15, и в каждом флуд всё равно предлагал 55-80 запросов/с
против порога 30/с, то есть мерить БЫЛО на чем.

Теперь предусловие содержательное и с тем же порогом, с которым сверяется
вердикт: пока флуд предлагает меньше `ceiling × 1.5`, следующее утверждение
зелено даже без потолка вовсе — значит измерения нет, и красный говорит «раннер
не потянул», а не «потолок сломан». Остальные четыре утверждения не тронуты.

2) backend weather_cache. Здесь подводило САМО утверждение: тест требовал
«ровно один сетевой вызов на 16 потоков», а код (#1370) прямым текстом выносит
вызов за lock и обещает обратное — «может породить несколько параллельных
запросов… приемлемо». Зелёным он был по везению GIL: 200 штормов дали 2 вызова
один раз (~0.5% — этим и покрасило #2781), а при `setswitchinterval(1e-6)`
больше одного вызова дали 197 штормов из 200.

Тест приведён к тому, что код правда гарантирует: значение у всех потоков одно,
сетевых вызовов не больше числа участников, ключ один, и ПОСЛЕ шторма кэш
отвечает без сети. Код не тронут: поведение объявлено приемлемым в #1370 с
обоснованием; настоящий single-flight (per-key lock) — отдельная задача с
отдельным обоснованием, а не побочный эффект правки теста.

Оба сторожа проверены на способность краснеть: снятый гейт насыщения + пул мимо
настройки → «957 сверок/с при потолке 20/с» (и под нагрузкой тоже краснеет, на
том же прогоне, где раньше падало предусловие); потерянная запись в кэш / чужой
ключ / мёртвый TTL → три разных красных сообщения.

Refs #2783
2026-08-07 15:12:30 +05:00
..
analysis_runs feat(parcels): typed AnalyzeResponse + run-history read endpoints (#961) 2026-06-06 18:13:34 +00:00
cadastre fix(#265 review): CRS 3857→4326 + stable zone_id hash + rename 102 + tx comment 2026-05-17 10:45:52 +03:00
chat feat(chat): tool get_parcel_info — курируемый градрегламент/ЗОУИТ/ЕГРН в контекст чата (#2366) 2026-07-04 01:24:42 +00:00
exporters fix(honesty): true competitors/neighbors totals + permits truncation disclosure (#2464 cluster B) (#2471) 2026-07-08 08:31:02 +00:00
forecasting fix(site_finder): SAVEPOINT-isolate gate-lookup db.execute swallows (#2464 Wave 2) (#2468) 2026-07-08 06:46:03 +00:00
generative fix(generative): устаревший VAT/office caveat в concept PDF (#2445-C1) (#2455) 2026-07-05 19:40:30 +00:00
llm feat(chat): tool get_parcel_info — курируемый градрегламент/ЗОУИТ/ЕГРН в контекст чата (#2366) 2026-07-04 01:24:42 +00:00
scrapers fix(tests): починить и вычистить проверки, которые не исполнялись ни разу (#2744) 2026-08-06 16:57:28 +00:00
site_finder fix(site_finder): SAVEPOINT supply/market + convert 2 bare rollbacks (#2464 Wave 2) (#2469) 2026-07-08 06:46:09 +00:00
__init__.py feat(cadastre): bulk_harvest worker + grid-walker + admin API (#168 PR3/5) (#171) 2026-05-15 13:31:32 +03:00
test_analytics_queries_domrf_dedup.py fix(analytics): de-inflate domrf_kn snapshot counts (8.49×) + backfill UPSERT columns (#2464) (#2470) 2026-07-08 07:30:12 +00:00
test_cadastre_bulk.py fix(cadastre): NSPD 500-retry + per-layer skip (#252) + disable dead pzz-beat (#259) + geom backfill (#200) 2026-06-13 20:45:05 +05:00
test_dadata_client.py fix(dadata): фолбэк на suggest/address при отключённой фиче CLEAN (#2250) 2026-07-03 03:42:40 +00:00
test_ekburg_permits.py feat(sf): geocode geom для ekburg_construction_permits из МСК-66 (#1124) 2026-06-07 11:16:45 +00:00
test_forecast_request_cache.py perf(forecast): per-request memoization cache for §22 cold build (#1129) 2026-06-08 05:26:27 +00:00
test_functional_zone_lookup.py feat(sf): ingest функц.зон генплана ЕКБ-2045 из ГИСОГД-СО WFS → ekb_genplan_functional_zone (#1137) 2026-06-07 12:03:39 +00:00
test_granddoc_lookup.py feat(sf): граддокументация (статус+ПАГЕ-реквизиты) из planning_projects в analyze (#1154) 2026-06-07 15:15:03 +00:00
test_ird_analyze.py fix(site_finder): SAVEPOINT-isolate gate-lookup db.execute swallows (#2464 Wave 2) (#2468) 2026-07-08 06:46:03 +00:00
test_ird_overlay_lookup.py fix(site-finder): расширить except в parcel_ird_overlaps до DataError (#1095) 2026-06-13 15:02:50 +05:00
test_job_settings.py fix(admin-jobs): UPSERT в PUT /admin/jobs/settings — не терять изменения (#1223) 2026-06-13 08:36:23 +00:00
test_krt_lookup.py fix(site_finder): SAVEPOINT-isolate gate-lookup db.execute swallows (#2464 Wave 2) (#2468) 2026-07-08 06:46:03 +00:00
test_mapping_review.py feat: ревью-инструмент авто-маппингов Объектив↔ДОМ.РФ (/admin/mapping-review) (#2278) 2026-07-03 07:59:13 +00:00
test_newbuilding_crossload.py fix(sf): psql stdin-bootstrap пароля gendesign_reader + COALESCE-protect внешних id (review fixup, #976) 2026-06-12 11:26:40 +03:00
test_nspd_denorm.py fix(week-review): backend-аудит v2 — 82 фиксов (#1660) 2026-06-17 17:13:38 +00:00
test_obj_class_backfill.py feat(etl): housing-class normalization fallback via yandex_realty trigram match (#38) (#1911) 2026-06-26 07:44:25 +00:00
test_objective_backfill.py fix(etl): гео-проход — префикс «г Екатеринбург» адресам без города (#2177 остаток) (#2245) 2026-07-03 01:41:19 +00:00
test_own_developer_ids_config.py feat(site-finder): own-portfolio data source for §25.3 cannibalization (#1169 PR1) 2026-06-08 16:21:53 +05:00
test_planning_lookup.py feat(sf): wire ППТ/ПМТ planning_projects в analyze ird-блок (#1105) 2026-06-06 20:50:34 +00:00
test_ppt_tep_lookup.py fix(site_finder): SAVEPOINT-isolate gate-lookup db.execute swallows (#2464 Wave 2) (#2468) 2026-07-08 06:46:03 +00:00
test_quarter_dump_lookup.py fix(site-finder): true-counts вместо молча-усечённых len(list) в connection-points/utility (#2445-A1/A2) (#2450) 2026-07-05 18:54:49 +00:00
test_recommend_mix_velocity.py fix(analytics): recommend_mix success-boost regression from view 172 (#1955) 2026-06-27 15:49:40 +05:00
test_reservation_lookup.py feat(sf): ПАГЕ-парсер изъятия/резервирования → land_reservation (#1118) 2026-06-07 10:15:03 +00:00
test_utility_characteristics.py feat(site-finder): теплотрассы из OSM в слой инженерной инфраструктуры (Фаза C1) (#2280) 2026-07-03 08:05:44 +00:00
test_weather_cache.py test(ci): развести «нагрузку не создать» и «защита сломана» в двух гейтах (#2783) 2026-08-07 15:12:30 +05:00
test_zone_regulation_backfill.py fix(site_finder): SAVEPOINT-isolate DB errors across cluster A (#2464) (#2465) 2026-07-07 12:50:11 +00:00
test_zone_regulation_extract.py feat(sf): zone_regulation_cache — ПЗЗ-регламент по zone_index + числовой экстракт (#1099) 2026-06-06 19:31:28 +00:00
test_zone_regulation_memo.py fix(site-finder): optimize zone-regulation resolve in /analyze (#1850) 2026-06-25 09:12:41 +00:00
test_zone_regulation_write_session.py fix(site-finder): isolate zone-regulation cache write off the request session (#1850 item 4) 2026-06-25 11:16:26 +00:00