@@ -2,16 +2,13 @@ package client
22
33import (
44 "context"
5- "crypto/tls"
65 "errors"
76 "net"
8- "sync"
97 "testing"
108 "time"
119
1210 "github.com/stretchr/testify/assert"
1311 "github.com/stretchr/testify/require"
14- "github.com/valyala/fasthttp"
1512 "github.com/valyala/fasthttp/fasthttputil"
1613
1714 "github.com/gofiber/fiber/v3"
@@ -73,10 +70,6 @@ func Test_Exec_Func(t *testing.T) {
7370 return errors .New ("the request is error" )
7471 })
7572
76- app .Get ("/redirect" , func (c fiber.Ctx ) error {
77- return c .Redirect ().Status (fiber .StatusFound ).To ("/normal" )
78- })
79-
8073 app .Get ("/hang-up" , func (c fiber.Ctx ) error {
8174 time .Sleep (time .Second )
8275 return c .SendString (c .Hostname () + " hang up" )
@@ -104,25 +97,6 @@ func Test_Exec_Func(t *testing.T) {
10497 require .Equal (t , "example.com" , string (resp .RawResponse .Body ()))
10598 })
10699
107- t .Run ("follow redirect with retry config" , func (t * testing.T ) {
108- t .Parallel ()
109- core , client , req := newCore (), New (), AcquireRequest ()
110- core .ctx = context .Background ()
111- core .client = client
112- core .req = req
113-
114- client .SetRetryConfig (& RetryConfig {MaxRetryCount : 1 })
115- client .SetDial (func (_ string ) (net.Conn , error ) { return ln .Dial () })
116- req .SetMaxRedirects (1 )
117- req .RawRequest .Header .SetMethod (fiber .MethodGet )
118- req .RawRequest .SetRequestURI ("http://example.com/redirect" )
119-
120- resp , err := core .execFunc ()
121- require .NoError (t , err )
122- require .Equal (t , 200 , resp .RawResponse .StatusCode ())
123- require .Equal (t , "example.com" , string (resp .RawResponse .Body ()))
124- })
125-
126100 t .Run ("the request return an error" , func (t * testing.T ) {
127101 t .Parallel ()
128102 core , client , req := newCore (), New (), AcquireRequest ()
@@ -157,59 +131,6 @@ func Test_Exec_Func(t *testing.T) {
157131
158132 require .Equal (t , ErrTimeoutOrCancel , err )
159133 })
160-
161- t .Run ("cancel drains errChan" , func (t * testing.T ) {
162- core , client , req := newCore (), New (), AcquireRequest ()
163- ctx , cancel := context .WithCancel (context .Background ())
164- defer cancel ()
165-
166- core .ctx = ctx
167- core .client = client
168- core .req = req
169-
170- req .RawRequest .SetRequestURI ("http://example.com/drain-err" )
171-
172- blockingTransport := newBlockingErrTransport (errors .New ("upstream failure" ))
173- client .transport = blockingTransport
174- defer blockingTransport .release ()
175-
176- type execResult struct {
177- resp * Response
178- err error
179- }
180-
181- resultCh := make (chan execResult , 1 )
182- go func () {
183- resp , err := core .execFunc ()
184- resultCh <- execResult {resp : resp , err : err }
185- }()
186-
187- select {
188- case <- blockingTransport .called :
189- case <- time .After (time .Second ):
190- t .Fatal ("transport Do was not invoked" )
191- }
192-
193- cancel ()
194-
195- var result execResult
196- select {
197- case result = <- resultCh :
198- case <- time .After (time .Second ):
199- t .Fatal ("execFunc did not return" )
200- }
201-
202- require .Nil (t , result .resp )
203- require .ErrorIs (t , result .err , ErrTimeoutOrCancel )
204-
205- blockingTransport .release ()
206-
207- select {
208- case <- blockingTransport .finished :
209- case <- time .After (time .Second ):
210- t .Fatal ("transport Do did not finish" )
211- }
212- })
213134}
214135
215136func Test_Execute (t * testing.T ) {
@@ -325,64 +246,3 @@ func Test_Execute(t *testing.T) {
325246 require .Equal (t , "example.com hang up" , string (resp .RawResponse .Body ()))
326247 })
327248}
328-
329- type blockingErrTransport struct {
330- err error
331-
332- called chan struct {}
333- unblock chan struct {}
334- finished chan struct {}
335-
336- calledOnce sync.Once
337- releaseOnce sync.Once
338- finishedOnce sync.Once
339- }
340-
341- func newBlockingErrTransport (err error ) * blockingErrTransport {
342- return & blockingErrTransport {
343- err : err ,
344- called : make (chan struct {}),
345- unblock : make (chan struct {}),
346- finished : make (chan struct {}),
347- }
348- }
349-
350- func (b * blockingErrTransport ) Do (_ * fasthttp.Request , _ * fasthttp.Response ) error {
351- b .calledOnce .Do (func () { close (b .called ) })
352- <- b .unblock
353- b .finishedOnce .Do (func () { close (b .finished ) })
354- return b .err
355- }
356-
357- func (b * blockingErrTransport ) DoTimeout (req * fasthttp.Request , resp * fasthttp.Response , _ time.Duration ) error {
358- return b .Do (req , resp )
359- }
360-
361- func (b * blockingErrTransport ) DoDeadline (req * fasthttp.Request , resp * fasthttp.Response , _ time.Time ) error {
362- return b .Do (req , resp )
363- }
364-
365- func (b * blockingErrTransport ) DoRedirects (req * fasthttp.Request , resp * fasthttp.Response , _ int ) error {
366- return b .Do (req , resp )
367- }
368-
369- func (* blockingErrTransport ) CloseIdleConnections () {
370- }
371-
372- func (* blockingErrTransport ) TLSConfig () * tls.Config {
373- return nil
374- }
375-
376- func (* blockingErrTransport ) SetTLSConfig (_ * tls.Config ) {
377- }
378-
379- func (* blockingErrTransport ) SetDial (_ fasthttp.DialFunc ) {
380- }
381-
382- func (* blockingErrTransport ) Client () any {
383- return nil
384- }
385-
386- func (b * blockingErrTransport ) release () {
387- b .releaseOnce .Do (func () { close (b .unblock ) })
388- }
0 commit comments