LOG: /home/naeel/terra/fission/scripts/../test-results/2026-05-03_18-08-19.log >>> Предварительная очистка тест-namespace-ов... pre_cleanup.sh: найдено 16 тест-namespace-ов, удаляем... namespace "fission-144f17f38393c868" deleted namespace "fission-15b9941047ab2ca0" deleted namespace "fission-436ddc8693d9dde4" deleted namespace "fission-4374fb3483a0d192" deleted namespace "fission-45ffb6f300b47b43" deleted namespace "fission-49fdb3ee07292199" deleted namespace "fission-4b897bd205a45e43" deleted namespace "fission-6b5d473720accdd7" deleted namespace "fission-6dca95c9a39f6956" deleted namespace "fission-8fade6140d3543be" deleted namespace "fission-9d30ab49ffc0a54c" deleted namespace "fission-ab0feb7a9dfb290c" deleted namespace "fission-b8c041b48a2ff140" deleted namespace "fission-c3511430abe5675b" deleted namespace "fission-ca1c1fc777879918" deleted namespace "fission-e510a990c82f30b2" deleted pre_cleanup.sh: очистка завершена. ╔══════════════════════════════════════╗ ║ fission-console — полный тест-сьют ║ ╚══════════════════════════════════════╝ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ЗАПУСК: test_auth.sh ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ======================================== test_auth.sh run=c265d58b ======================================== >>> POST /auth: пустой токен → 400 PASS: POST /auth пустой token → 400 (HTTP 400) >>> POST /auth: токен < 6 символов → 401 PASS: POST /auth токен 2 символа → 401 (HTTP 401) PASS: POST /auth токен 5 символов → 401 (HTTP 401) >>> POST /auth: токен ≥6 символов → 200 PASS: POST /auth валидный токен → 200 (HTTP 200) PASS: POST /auth namespace=fission-... PASS: POST /auth ok=true >>> POST /auth: невалидный JSON → 400 PASS: POST /auth невалидный JSON → 400 >>> POST /auth: GET метод → 405 PASS: GET /auth → 405 >>> X-Auth-Token: отсутствует → 401 PASS: GET /functions без токена → 401 (HTTP 401) >>> X-Auth-Token: токен < 6 символов → 401 PASS: GET /functions токен 2 символа → 401 (HTTP 401) PASS: GET /functions токен 5 символов → 401 (HTTP 401) >>> X-Auth-Token: токен ≥6 символов → 200 PASS: GET /functions валидный X-Auth-Token → 200 (HTTP 200) >>> Authorization: Bearer → 200 PASS: GET /functions Authorization: Bearer → 200 (HTTP 200) >>> Namespace детерминирован (одинаковый токен → одинаковый NS) PASS: Namespace детерминирован: fission-4f2623887cc7119c ======================================== ИТОГ: PASS=14 FAIL=0 ========================================  ✓ test_auth.sh — PASSED ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ЗАПУСК: test_functions_crud.sh ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ======================================== test_functions_crud.sh run=0be6b674 ======================================== >>> CREATE: базовый nodejs → 201 PASS: CREATE nodejs → 201 (HTTP 201) PASS: CREATE: name в ответе PASS: CREATE: route непустой PASS: CREATE: package непустой >>> CREATE: дубликат → 409 PASS: CREATE дубликат → 409 (HTTP 409) >>> CREATE: без name → 400 PASS: CREATE без name → 400 (HTTP 400) >>> CREATE: без language → 400 PASS: CREATE без language → 400 (HTTP 400) >>> CREATE: без code → 400 PASS: CREATE без code → 400 (HTTP 400) >>> CREATE: невалидный язык → 400 PASS: CREATE язык=cobol → 400 (HTTP 400) >>> CREATE: валидация имени PASS: CREATE имя с заглавной → 400 (HTTP 400) PASS: CREATE имя с ведущим дефисом → 400 (HTTP 400) PASS: CREATE имя с завершающим дефисом → 400 (HTTP 400) PASS: CREATE имя с пробелом → 400 (HTTP 400) PASS: CREATE имя 58 символов → 400 (HTTP 400) PASS: CREATE имя 57 символов → 201 (HTTP 201) >>> CREATE: код > 1MB → 400 или 413 PASS: CREATE код > 1MB → отклонён (000) >>> LIST: GET /functions → 200, массив PASS: LIST GET /functions → 200 (HTTP 200) PASS: LIST: содержит ≥1 функцию (создали выше) >>> LIST: новый пользователь → пустой массив PASS: LIST новый пользователь → 200 (HTTP 200) PASS: LIST новый пользователь → [] >>> GET: /functions/{name} → 200 PASS: GET /functions/t-crud-fn-0be6b674 → 200 (HTTP 200) PASS: GET: name совпадает PASS: GET: environment непустой (console-nodejs-env) >>> GET: несуществующая функция → 404 PASS: GET несуществующая → 404 (HTTP 404) >>> DELETE: /functions/{name} → 200 PASS: DELETE crud-fn → 200 (HTTP 200) PASS: DELETE: deleted=true >>> DELETE: повторное удаление → 404 PASS: DELETE повторное → 404 (HTTP 404) >>> GET: после DELETE → 404 PASS: GET после DELETE → 404 (HTTP 404) >>> DELETE: несуществующая функция → 404 PASS: DELETE несуществующая → 404 (HTTP 404) ======================================== ИТОГ: PASS=29 FAIL=0 ========================================  ✓ test_functions_crud.sh — PASSED ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ЗАПУСК: test_ttl.sh ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ======================================== test_ttl.sh run=954bd7d6 ======================================== >>> CREATE без TTL → expires_at отсутствует PASS: CREATE без TTL: expires_at отсутствует >>> CREATE с TTL=15m → expires_at присутствует PASS: CREATE TTL=15m: expires_at=2026-05-03T15:24:08Z PASS: expires_at формат RFC3339 >>> CREATE с TTL=1h → expires_at присутствует PASS: CREATE TTL=1h: expires_at=2026-05-03T16:09:09Z >>> CREATE с TTL=2d → expires_at присутствует PASS: CREATE TTL=2d: expires_at=2026-05-05T15:09:10Z >>> CREATE TTL невалидный → 400 (без создания объектов) PASS: TTL='99z' → 400 PASS: TTL='abc' → 400 PASS: TTL='0d' → 400 PASS: TTL='-1h' → 400 >>> LIST: функция с TTL видна в списке PASS: LIST: видно ≥3 функции (2 с TTL, 1 без) ======================================== ИТОГ: PASS=10 FAIL=0 ========================================  ✓ test_ttl.sh — PASSED ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ЗАПУСК: test_isolation.sh ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ======================================== test_isolation.sh run=601bf90d ======================================== >>> Alice создаёт функцию PASS: Alice CREATE t-alice-fn → 201 (HTTP 201) >>> Bob GET t-alice-fn → 404 PASS: Bob GET t-alice-fn → 404 (HTTP 404) >>> Bob DELETE t-alice-fn → 404 PASS: Bob DELETE t-alice-fn → 404 (HTTP 404) >>> Bob PUT t-alice-fn/code → 404 PASS: Bob PUT t-alice-fn/code → 404 (HTTP 404) >>> Bob INVOKE t-alice-fn → 404 PASS: Bob INVOKE t-alice-fn → 404 (HTTP 404) >>> Alice GET t-alice-fn → 200 (не повреждена) PASS: Alice GET t-alice-fn → 200 (HTTP 200) >>> LIST изоляция: Alice и Bob видят только свои функции FAIL: Alice LIST не содержит t-alice-fn (count=1) PASS: Alice LIST не содержит t-bob-fn FAIL: Bob LIST не содержит t-bob-fn PASS: Bob LIST не содержит t-alice-fn >>> Route изоляция: одинаковое имя → разные routes PASS: Route изоляция: /cb6533e3a6b0/t-alice-fn ≠ /c49acc82f3ed/t-bob-fn ======================================== ИТОГ: PASS=9 FAIL=2 ========================================  ✗ test_isolation.sh — FAILED (exit 1) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ЗАПУСК: test_update.sh ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ======================================== test_update.sh run=3adb41f6 ======================================== >>> CREATE: версия v1 FAIL: CREATE v1 → 201 — got 502, want 201 Ждём прогрева... TRY=1 fn=t-upd-fn-3adb41f6 status= raw= err= TRY=2 fn=t-upd-fn-3adb41f6 status= raw= err= TRY=3 fn=t-upd-fn-3adb41f6 status= raw= err= TRY=4 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=5 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=6 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=7 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=8 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=9 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=10 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=11 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=12 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found FAIL: Invoke v1 не стабилизировался >>> PUT /code: версия v2 FAIL: PUT /code v2 → 200 — got 404, want 200 FAIL: PUT /code: updated='' FAIL: PUT /code: package пустой Ждём пока executor подхватит новый код... TRY=1 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=2 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=3 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=4 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=5 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=6 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=7 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=8 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=9 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=10 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=11 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=12 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=13 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=14 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=15 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found FAIL: Invoke после update не вернул version-two >>> PUT /code: пустой код → 400 PASS: PUT /code пустой код → 400 (HTTP 400) PASS: PUT /code пробельный код → 400 (HTTP 400) >>> PUT /code: несуществующая функция → 404 PASS: PUT /code несуществующая → 404 (HTTP 404) >>> PUT /code: версия v3 (цепочка) TRY=1 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=2 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=3 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=4 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=5 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=6 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=7 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=8 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=9 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found TRY=10 fn=t-upd-fn-3adb41f6 status= raw= err=function "t-upd-fn-3adb41f6" not found