Some checks are pending
Security Checks / security (push) Waiting to run
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
43 lines
1.2 KiB
Go
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)
|
|
}
|
|
}
|