http_test.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Copyright 2017 The go-ethereum Authors
  2. // This file is part of the go-ethereum library.
  3. //
  4. // The go-ethereum library is free software: you can redistribute it and/or modify
  5. // it under the terms of the GNU Lesser General Public License as published by
  6. // the Free Software Foundation, either version 3 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // The go-ethereum library is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. // GNU Lesser General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU Lesser General Public License
  15. // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
  16. package rpc
  17. import (
  18. "net/http"
  19. "net/http/httptest"
  20. "strings"
  21. "testing"
  22. )
  23. func TestHTTPErrorResponseWithDelete(t *testing.T) {
  24. testHTTPErrorResponse(t, http.MethodDelete, contentType, "", http.StatusMethodNotAllowed)
  25. }
  26. func TestHTTPErrorResponseWithPut(t *testing.T) {
  27. testHTTPErrorResponse(t, http.MethodPut, contentType, "", http.StatusMethodNotAllowed)
  28. }
  29. func TestHTTPErrorResponseWithMaxContentLength(t *testing.T) {
  30. body := make([]rune, maxRequestContentLength+1)
  31. testHTTPErrorResponse(t,
  32. http.MethodPost, contentType, string(body), http.StatusRequestEntityTooLarge)
  33. }
  34. func TestHTTPErrorResponseWithEmptyContentType(t *testing.T) {
  35. testHTTPErrorResponse(t, http.MethodPost, "", "", http.StatusUnsupportedMediaType)
  36. }
  37. func TestHTTPErrorResponseWithValidRequest(t *testing.T) {
  38. testHTTPErrorResponse(t, http.MethodPost, contentType, "", 0)
  39. }
  40. func testHTTPErrorResponse(t *testing.T, method, contentType, body string, expected int) {
  41. request := httptest.NewRequest(method, "http://url.com", strings.NewReader(body))
  42. request.Header.Set("content-type", contentType)
  43. if code, _ := validateRequest(request); code != expected {
  44. t.Fatalf("response code should be %d not %d", expected, code)
  45. }
  46. }