fix: v0.1.50 — runtime 400 + SLESS_ENTRYPOINT в Deployment

Bug 1: services.go — k8s IsInvalid error (CRD enum validation) маппился в 500.
Теперь errors.IsInvalid() → 400 Bad Request (invalid service spec).

Bug 2: service_controller.go buildServiceDeployment не передавал env SLESS_ENTRYPOINT
в под. Добавлен в envVars из svc.Spec.Entrypoint. Без него server.py использовал
fallback handler.handle и не замечал неверный entrypoint.

operator_failure_test.sh 12B-2: обновлён под новое правильное поведение —
create ruby3.0 → 400 (не 201). Старый 201-путь сохранён как warn для совместимости.
This commit is contained in:
Naeel
2026-03-22 08:11:05 +03:00
parent d4ccbc7d15
commit a76baa62a3
6 changed files with 100 additions and 7 deletions
+10 -6
View File
@@ -415,17 +415,21 @@ else
fail "create $CORRUPT_FN → HTTP $create_code"
fi
# 12B-2: Неверный runtime ("ruby3.0") — создаётся, но upload падает
# 12B-2: Неверный runtime ("ruby3.0") — CRD enum validation отклоняет немедленно
# v0.1.50: исправлено — services.go теперь маппит k8s IsInvalid → 400 вместо 500
BADRT_FN="badrt-${SFX}"
CLEANUP_NAMES+=("$BADRT_FN")
info "12B-2 runtime='ruby3.0' → create ожидаем 201, upload ожидаем 400..."
info "12B-2 runtime='ruby3.0' → create ожидаем 400 (CRD enum validation)..."
create_code2=$(api_code POST "$API/services" \
"{\"name\":\"$BADRT_FN\",\"runtime\":\"ruby3.0\",\
\"entrypoint\":\"handler.handle\",\"memory_mb\":128}")
if [[ "$create_code2" == "201" ]]; then
pass "runtime=ruby3.0 → create HTTP 201 (API не валидирует runtime имена)"
if [[ "$create_code2" == "400" ]]; then
pass "runtime=ruby3.0 → create HTTP 400 (CRD enum validation отклонил немедленно)"
CLEANUP_NAMES=( "${CLEANUP_NAMES[@]/$BADRT_FN}" )
elif [[ "$create_code2" == "201" ]]; then
# Старое поведение (до v0.1.50): API принимал любое имя runtime, ошибка на upload
warn "runtime=ruby3.0 → create HTTP 201 (CRD enum validation не работает — проверь CRD)"
note "GAP: API принимает любое runtime имя при создании; ошибка только на upload."
# Загружаем минимальный zip — PrepareContext упадёт на runtimeBaseImage("ruby3.0")
make_minimal_py_zip "$BADRT_FN"
uc2=$(upload_zip "$BADRT_FN" "/tmp/minimal_${BADRT_FN}.zip")
if [[ "$uc2" == "400" ]]; then
@@ -437,7 +441,7 @@ if [[ "$create_code2" == "201" ]]; then
"$(api_code DELETE "$API/services/$BADRT_FN")" "204"
CLEANUP_NAMES=( "${CLEANUP_NAMES[@]/$BADRT_FN}" )
else
fail "runtime=ruby3.0 → create HTTP $create_code2 (ожидали 201)"
fail "runtime=ruby3.0 → create HTTP $create_code2 (ожидали 400)"
fi
# 12B-3: Пустой zip (без handler.py) — upload и build проходят, но контейнер падает