mirror of
https://github.com/infinite-iroha/touka.git
synced 2026-06-13 15:47:38 +08:00
fix: reduce default error response overhead
Encode the built-in 404 and 405 payload with a fixed struct instead of a map so default error pages allocate less on the hot miss path. Add a regression test to keep the JSON shape stable.
This commit is contained in:
parent
57847fa446
commit
fa027347d3
2 changed files with 28 additions and 5 deletions
|
|
@ -1,6 +1,7 @@
|
|||
package touka
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"testing"
|
||||
)
|
||||
|
|
@ -100,3 +101,23 @@ func TestOptionsAllowHeaderListsMatchingMethods(t *testing.T) {
|
|||
t.Fatalf("expected Allow header to list matching methods, got %q", allow)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDefaultErrorHandleJSONShape(t *testing.T) {
|
||||
engine := New()
|
||||
rr := PerformRequest(engine, http.MethodGet, "/missing", nil, nil)
|
||||
if rr.Code != http.StatusNotFound {
|
||||
t.Fatalf("expected status %d, got %d", http.StatusNotFound, rr.Code)
|
||||
}
|
||||
|
||||
var body struct {
|
||||
Code int `json:"code"`
|
||||
Message string `json:"message"`
|
||||
Error string `json:"error"`
|
||||
}
|
||||
if err := json.Unmarshal(rr.Body.Bytes(), &body); err != nil {
|
||||
t.Fatalf("expected JSON error body, got %q: %v", rr.Body.String(), err)
|
||||
}
|
||||
if body.Code != http.StatusNotFound || body.Message != http.StatusText(http.StatusNotFound) || body.Error != "not found" {
|
||||
t.Fatalf("unexpected error payload: %+v", body)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue