41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
# 2026-03-21 — chaos-badparams: проверяет что функция не падает на мусорных входных данных.
|
|
# Принимает type=missing|wrong_type|huge|negative|zero и возвращает safe-ответ.
|
|
# Тестирует: устойчивость к "тупому юзеру" — никакого 500 на плохих входных данных.
|
|
import json
|
|
|
|
_MAX_N = 10_000
|
|
|
|
def validate(event):
|
|
errors = []
|
|
results = {}
|
|
|
|
# n: должно быть int от 1 до MAX_N
|
|
raw_n = event.get("n")
|
|
try:
|
|
n = int(raw_n)
|
|
if n <= 0:
|
|
errors.append(f"n must be > 0, got {n}")
|
|
n = 1
|
|
elif n > _MAX_N:
|
|
errors.append(f"n capped from {n} to {_MAX_N}")
|
|
n = _MAX_N
|
|
except (TypeError, ValueError):
|
|
errors.append(f"n is not a valid int: {repr(raw_n)}, using default 1")
|
|
n = 1
|
|
results["n"] = n
|
|
|
|
# name: обрезаем до 100 символов
|
|
raw_name = event.get("name", "")
|
|
if not isinstance(raw_name, str):
|
|
raw_name = str(raw_name)
|
|
errors.append("name was not a string, converted")
|
|
name = raw_name[:100]
|
|
results["name"] = name
|
|
|
|
# flag: любое "truthy" значение
|
|
raw_flag = event.get("flag", False)
|
|
flag = raw_flag in (True, "true", "1", 1, "yes")
|
|
results["flag"] = flag
|
|
|
|
return {"ok": len(errors) == 0, "errors": errors, "results": results}
|