request.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package framework
  2. import (
  3. "bytes"
  4. "net/http"
  5. flog "github.com/fatedier/frp/pkg/util/log"
  6. "github.com/fatedier/frp/test/e2e/framework/consts"
  7. "github.com/fatedier/frp/test/e2e/pkg/request"
  8. )
  9. func SpecifiedHTTPBodyHandler(body []byte) http.HandlerFunc {
  10. return func(w http.ResponseWriter, req *http.Request) {
  11. w.Write(body)
  12. }
  13. }
  14. func ExpectResponseCode(code int) EnsureFunc {
  15. return func(resp *request.Response) bool {
  16. return resp.Code == code
  17. }
  18. }
  19. // NewRequest return a default request with default timeout and content.
  20. func NewRequest() *request.Request {
  21. return request.New().
  22. Timeout(consts.DefaultTimeout).
  23. Body([]byte(consts.TestString))
  24. }
  25. func NewHTTPRequest() *request.Request {
  26. return request.New().HTTP().HTTPParams("GET", "", "/", nil)
  27. }
  28. type RequestExpect struct {
  29. req *request.Request
  30. f *Framework
  31. expectResp []byte
  32. expectError bool
  33. explain []interface{}
  34. }
  35. func NewRequestExpect(f *Framework) *RequestExpect {
  36. return &RequestExpect{
  37. req: NewRequest(),
  38. f: f,
  39. expectResp: []byte(consts.TestString),
  40. expectError: false,
  41. explain: make([]interface{}, 0),
  42. }
  43. }
  44. func (e *RequestExpect) RequestModify(f func(r *request.Request)) *RequestExpect {
  45. f(e.req)
  46. return e
  47. }
  48. func (e *RequestExpect) Protocol(protocol string) *RequestExpect {
  49. e.req.Protocol(protocol)
  50. return e
  51. }
  52. func (e *RequestExpect) PortName(name string) *RequestExpect {
  53. if e.f != nil {
  54. e.req.Port(e.f.PortByName(name))
  55. }
  56. return e
  57. }
  58. func (e *RequestExpect) Port(port int) *RequestExpect {
  59. if e.f != nil {
  60. e.req.Port(port)
  61. }
  62. return e
  63. }
  64. func (e *RequestExpect) ExpectResp(resp []byte) *RequestExpect {
  65. e.expectResp = resp
  66. return e
  67. }
  68. func (e *RequestExpect) ExpectError(expectErr bool) *RequestExpect {
  69. e.expectError = expectErr
  70. return e
  71. }
  72. func (e *RequestExpect) Explain(explain ...interface{}) *RequestExpect {
  73. e.explain = explain
  74. return e
  75. }
  76. type EnsureFunc func(*request.Response) bool
  77. func (e *RequestExpect) Ensure(fns ...EnsureFunc) {
  78. ret, err := e.req.Do()
  79. if e.expectError {
  80. ExpectErrorWithOffset(1, err, e.explain...)
  81. return
  82. }
  83. ExpectNoErrorWithOffset(1, err, e.explain...)
  84. if len(fns) == 0 {
  85. if !bytes.Equal(e.expectResp, ret.Content) {
  86. flog.Trace("Response info: %+v", ret)
  87. }
  88. ExpectEqualValuesWithOffset(1, e.expectResp, ret.Content, e.explain...)
  89. } else {
  90. for _, fn := range fns {
  91. ok := fn(ret)
  92. if !ok {
  93. flog.Trace("Response info: %+v", ret)
  94. }
  95. ExpectTrueWithOffset(1, ok, e.explain...)
  96. }
  97. }
  98. }
  99. func (e *RequestExpect) Do() (*request.Response, error) {
  100. return e.req.Do()
  101. }