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 }