requestparser_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package internal
  2. import (
  3. "errors"
  4. "net/http"
  5. "net/http/httptest"
  6. "strings"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/zeromicro/go-zero/rest/pathvar"
  10. )
  11. func TestNewRequestParserNoVar(t *testing.T) {
  12. req := httptest.NewRequest("GET", "/", http.NoBody)
  13. parser, err := NewRequestParser(req, nil)
  14. assert.Nil(t, err)
  15. assert.NotNil(t, parser)
  16. }
  17. func TestNewRequestParserWithVars(t *testing.T) {
  18. req := httptest.NewRequest("GET", "/", http.NoBody)
  19. req = pathvar.WithVars(req, map[string]string{"a": "b"})
  20. parser, err := NewRequestParser(req, nil)
  21. assert.Nil(t, err)
  22. assert.NotNil(t, parser)
  23. }
  24. func TestNewRequestParserNoVarWithBody(t *testing.T) {
  25. req := httptest.NewRequest("GET", "/", strings.NewReader(`{"a": "b"}`))
  26. parser, err := NewRequestParser(req, nil)
  27. assert.Nil(t, err)
  28. assert.NotNil(t, parser)
  29. }
  30. func TestNewRequestParserWithNegativeContentLength(t *testing.T) {
  31. req := httptest.NewRequest("GET", "/", strings.NewReader(`{"a": "b"}`))
  32. req.ContentLength = -1
  33. parser, err := NewRequestParser(req, nil)
  34. assert.Nil(t, err)
  35. assert.NotNil(t, parser)
  36. }
  37. func TestNewRequestParserWithVarsWithBody(t *testing.T) {
  38. req := httptest.NewRequest("GET", "/", strings.NewReader(`{"a": "b"}`))
  39. req = pathvar.WithVars(req, map[string]string{"c": "d"})
  40. parser, err := NewRequestParser(req, nil)
  41. assert.Nil(t, err)
  42. assert.NotNil(t, parser)
  43. }
  44. func TestNewRequestParserWithVarsWithWrongBody(t *testing.T) {
  45. req := httptest.NewRequest("GET", "/", strings.NewReader(`{"a": "b"`))
  46. req = pathvar.WithVars(req, map[string]string{"c": "d"})
  47. parser, err := NewRequestParser(req, nil)
  48. assert.NotNil(t, err)
  49. assert.Nil(t, parser)
  50. }
  51. func TestNewRequestParserWithForm(t *testing.T) {
  52. req := httptest.NewRequest("GET", "/val?a=b", nil)
  53. parser, err := NewRequestParser(req, nil)
  54. assert.Nil(t, err)
  55. assert.NotNil(t, parser)
  56. }
  57. func TestNewRequestParserWithNilBody(t *testing.T) {
  58. req := httptest.NewRequest("GET", "/val?a=b", http.NoBody)
  59. req.Body = nil
  60. parser, err := NewRequestParser(req, nil)
  61. assert.Nil(t, err)
  62. assert.NotNil(t, parser)
  63. }
  64. func TestNewRequestParserWithBadBody(t *testing.T) {
  65. req := httptest.NewRequest("GET", "/val?a=b", badBody{})
  66. req.Body = badBody{}
  67. parser, err := NewRequestParser(req, nil)
  68. assert.Nil(t, err)
  69. assert.NotNil(t, parser)
  70. }
  71. func TestNewRequestParserWithBadForm(t *testing.T) {
  72. req := httptest.NewRequest("GET", "/val?a%1=b", http.NoBody)
  73. parser, err := NewRequestParser(req, nil)
  74. assert.NotNil(t, err)
  75. assert.Nil(t, parser)
  76. }
  77. func TestRequestParser_buildJsonRequestParser(t *testing.T) {
  78. parser, err := buildJsonRequestParser(map[string]any{"a": make(chan int)}, nil)
  79. assert.NotNil(t, err)
  80. assert.Nil(t, parser)
  81. }
  82. type badBody struct{}
  83. func (badBody) Read([]byte) (int, error) { return 0, errors.New("something bad") }
  84. func (badBody) Close() error { return nil }