Files
drhider/History/tests/2026-08-24-tests-upload-and-obfuscation.md
T

3.5 KiB
Raw Blame History

drhider — тесты загрузки и обфускации (2026-08-24, v0.0.62)

Кластер naeel-test-3, v0.0.62 (лимиты 50МБ/файл, 500МБ/сессия), под 1 CPU / 2 GiB (requests=limits, подтверждено kubectl). ВМ-буфер: https://contracts.kube5s.ru/drhider-upload/.

Тест 1 — загрузка (upload-only), много + больших файлов

Корпус: 118 бинарных файлов, 480 МБ (8×45МБ + 10×10МБ + 100×200КБ). Файлы >40МБ — 8 шт.

Этап Результат
PUT на ВМ (P=8, --resolve обход DNS) 119/119 HTTP 201, 43.4с
POST /api/upload_refs HTTP 200, 50.8с, {count:119, session}
GET /api/session_files 119 файлов, 480.5 МБ, 8 больших (>40МБ)

Вывод: загрузка через ВМ стабильна на объёме 480МБ/119 файлов под лимитом 500МБ, 0 ошибок.

Тест 2 — обфускация, много мелких файлов

Корпус: 100 сгенерированных .txt-договоров с фейковыми PII (ФИО, телефоны, ИНН, ОГРН, БИК, р/с, к/с, паспорта, адреса, email). Сессия bba1a7272aed.

Показатель Значение
start / done 101 / 101 (0 ошибок)
complete {total: 101, tokens: 1 569 716, llm_sec: 1924.6}
SSE-время 1995.6с (~33.3 мин)
ZIP 404 — НЕ скачался
CSV 404 — НЕ скачался

Обфускация отработала полностью (101 done, complete пришёл, zip_len=147861 в логе worker), но результат потерян при скачивании — см. баг ниже.

⚠️ Найденный баг: TTL сессии (30 мин) короче долгой обфускации

  • site/session.py: TTL_SECONDS = 30*60, таймер запускается при создании сессии и не продлевается во время обработки (threading.Timer, _clean просто pop(sid)).
  • Обфускация заняла 1995с (> 1800с TTL) → таймер удалил сессию посреди обработки.
  • store_result(sid, zip) при отсутствующей сессии молча возвращает False → результат не сохранён.
  • GET /api/download/<sid> и /api/csv/<sid>get_result=None → 404.
  • Подтверждено: session_files/bba1a7272aed → 404; лог: worker: done ... in 1995.0s ... zip_len=147861.

Почему раньше не всплыло: в тесте 23.08 каждая сессия завершалась за 19/16 мин < TTL.

Предлагаемый фикс: продлевать TTL при активности обработки (cancel+restart таймера на каждое событие прогресса, либо отдельный длинный TTL для «в обработке», либо сохранять результат даже при истёкшей сессии). Не делалось — ждёт «делай».

Прочее

  • Первый прогон теста 1 упал из-за бага тест-скрипта (отправил список вместо {files:[...]} в upload_refs) — сервис тут ни при чём.
  • DNS на Krupski медленный (~5с/резолв) — в тестах обходился curl --resolve.