package test import ( "fmt" "net/http" "net/http/httptest" "strings" "testing" "unicode/utf8" "github.com/dixxe/personal-website/iternal/controllers" ) func TestPostMessage(t *testing.T) { test_value := `{"content":"banan","msg_type":10}` body := strings.NewReader(test_value) req, err := http.NewRequest("POST", "/cctweaked", body) if err != nil { t.Fatal(err) } rr := httptest.NewRecorder() http.HandlerFunc(controllers.PostSendMessage).ServeHTTP(rr, req) req, err = http.NewRequest("GET", "/cctweaked", nil) if err != nil { t.Fatal(err) } http.HandlerFunc(controllers.GetMessage).ServeHTTP(rr, req) expected := `{banan 10}` if strings.Trim(rr.Body.String(), "\n ") != expected { t.Errorf("handler returned unexpected body: got %v want %v", rr.Body.String(), expected) } } func FuzzPostMessage(f *testing.F) { f.Add(0, "banan") f.Fuzz(func(t *testing.T, msg_type int, content string) { if !utf8.Valid([]byte(content)) { return } body := strings.NewReader(fmt.Sprintf(`{"content":"%v","msg_type":%v}`, content, msg_type)) req, err := http.NewRequest("POST", "/cctweaked", body) if err != nil { t.Fatal(err) } rr := httptest.NewRecorder() http.HandlerFunc(controllers.PostSendMessage).ServeHTTP(rr, req) req, err = http.NewRequest("GET", "/cctweaked", nil) if err != nil { t.Fatal(err) } http.HandlerFunc(controllers.GetMessage).ServeHTTP(rr, req) expected := fmt.Sprintf(`{%v %v}`, content, msg_type) if rr.Result().StatusCode == 400 { return } if strings.Trim(rr.Body.String(), "\n ") != expected { t.Errorf("handler returned unexpected body: got %v want %v", rr.Body.String(), expected) } }) }