Smail/backend/controllers/request_security_test.go
smail f60d3b0880
Some checks are pending
Security Checks / security (push) Waiting to run
整理前后端与测试构建目录并完善配置和安全引导
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
2026-09-05 19:19:52 +08:00

43 lines
1.2 KiB
Go

package controllers
import (
"net/http"
"net/http/httptest"
"strings"
"testing"
)
type requestDecoderFixture struct {
Value string `json:"value"`
}
func TestDecodeJSONRequestRejectsUnsafeBodies(t *testing.T) {
tests := []struct {
name string
payload string
}{
{name: "unknown field", payload: `{"value":"ok","extra":true}`},
{name: "trailing value", payload: `{"value":"ok"} {}`},
{name: "oversized", payload: `{"value":"` + strings.Repeat("a", int(maxJSONRequestBytes)) + `"}`},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
request := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(test.payload))
if err := decodeJSONRequest(httptest.NewRecorder(), request, &requestDecoderFixture{}); err == nil {
t.Fatal("unsafe request body was accepted")
}
})
}
}
func TestDecodeJSONRequestAcceptsSingleValue(t *testing.T) {
request := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(`{"value":"ok"}`))
var decoded requestDecoderFixture
if err := decodeJSONRequest(httptest.NewRecorder(), request, &decoded); err != nil {
t.Fatal(err)
}
if decoded.Value != "ok" {
t.Fatalf("unexpected value: %q", decoded.Value)
}
}