From bfe487164f4de78f484bd20f81d5b3730e65e767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sun, 6 Sep 2026 13:38:35 +0300 Subject: [PATCH] Document hard 0.2.2 release test --- HISTORY/2026-09-06-release-0.2.2-hard-test.md | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 HISTORY/2026-09-06-release-0.2.2-hard-test.md diff --git a/HISTORY/2026-09-06-release-0.2.2-hard-test.md b/HISTORY/2026-09-06-release-0.2.2-hard-test.md new file mode 100644 index 0000000..20ba843 --- /dev/null +++ b/HISTORY/2026-09-06-release-0.2.2-hard-test.md @@ -0,0 +1,55 @@ +# 2026-09-06: жёсткий полный тест релиза 0.2.2 + +## Объём проверки + +Проверен опубликованный релиз `0.2.2`, commit `df0576a` на `origin/master`. + +- frontend build; +- весь Node test suite; +- весь Python test suite с `-vv --tb=long`; +- синтаксис всех исходных Python и JavaScript файлов; +- runtime запуск Flask; +- HTTP endpoints и раздача собранных бандлов; +- отрицательные API-сценарии безопасности и целостности транзита. + +## Результаты + +- `npm run build` — PASS; +- `npm test` — `10/10` PASS; +- `python3 -m pytest tests/ -vv --tb=long` — `10/10` PASS; +- `py_compile` — `22` Python-файла PASS; +- `node --check` — `13` JavaScript-файлов PASS; +- `git diff --check` — PASS; +- `/health` — HTTP 200, тело `ok`; +- `/` — HTTP 200; +- `/file-picker/file-picker.esm.js` — HTTP 200; +- `/file-picker/file-picker.iife.js` — HTTP 200; +- `/upload-frontend/index.js` — HTTP 200; +- Flask слушает `0.0.0.0:5000`. + +## Отрицательные сценарии + +Отдельный smoke-набор подтвердил: + +- пустой `upload_refs` возвращает HTTP 400; +- malformed JSON возвращает HTTP 400; +- traversal-имя не попадает в сессию и не удаляет файл из буфера; +- SSRF URL вне разрешённого prefix пропускается без pull; +- валидный файл создаёт новую RAM-сессию; +- файл переносится в RAM; +- callback Layer 3 вызывается; +- файл удаляется из mock buffer после успешного pull; +- повторное чтение удалённого файла возвращает 404. + +## Исправления harness во время проверки + +Два первых запуска расширенного smoke-набора остановились в тестовом harness, не в приложении: + +1. Для in-process Flask pull не был задан `httpx.WSGITransport`, поэтому backend получил `Connection refused`. +2. Следующий запуск передал несуществующий `session`; API корректно вернул сценарий `Session not found` вместо создания сессии. Новая сессия создаётся при отсутствии поля `session`. + +После исправления harness smoke-набор завершился `strict_negative_smoke=PASS`. + +## Итог + +Релиз `0.2.2` прошёл полный автоматический, синтаксический, runtime и отрицательный security-тест. Код не изменялся, поэтому версию не повышали.