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