Smail/server/hooks/framework/framework_test.go

42 lines
1.5 KiB
Go

package framework
import (
"bytes"
"net/http"
"net/http/httptest"
"testing"
)
func TestDecodePluginRequestRejectsInvalidMethodAndOversizedBody(t *testing.T) {
var dto HookDTO
methodRequest := httptest.NewRequest(http.MethodGet, "/", nil)
methodRecorder := httptest.NewRecorder()
if decodePluginRequest(methodRecorder, methodRequest, &dto) {
t.Fatal("GET request was accepted")
}
if methodRecorder.Code != http.StatusMethodNotAllowed {
t.Fatalf("status = %d, want %d", methodRecorder.Code, http.StatusMethodNotAllowed)
}
oversizedBody := append([]byte(`{"ServerVersion":"`), bytes.Repeat([]byte{'a'}, int(maxPluginRPCBytes))...)
oversizedBody = append(oversizedBody, []byte(`"}`)...)
oversizedRequest := httptest.NewRequest(http.MethodPost, "/", bytes.NewReader(oversizedBody))
oversizedRecorder := httptest.NewRecorder()
if decodePluginRequest(oversizedRecorder, oversizedRequest, &dto) {
t.Fatal("oversized request was accepted")
}
if oversizedRecorder.Code != http.StatusRequestEntityTooLarge {
t.Fatalf("status = %d, want %d", oversizedRecorder.Code, http.StatusRequestEntityTooLarge)
}
}
func TestWritePluginResponseRejectsOversizedBody(t *testing.T) {
recorder := httptest.NewRecorder()
if err := writePluginResponse(recorder, "text/plain", bytes.Repeat([]byte{'a'}, int(maxPluginRPCBytes)+1)); err == nil {
t.Fatal("oversized response was accepted")
}
if recorder.Code != http.StatusRequestEntityTooLarge {
t.Fatalf("status = %d, want %d", recorder.Code, http.StatusRequestEntityTooLarge)
}
}