Skip to content

Commit

Permalink
[~] quick fix example
Browse files Browse the repository at this point in the history
  • Loading branch information
Noooste committed Mar 5, 2024
1 parent d0b3d67 commit 6d318a3
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
14 changes: 12 additions & 2 deletions session.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,9 @@ func (s *Session) send(request *Request) (response *Response, err error) {
s.logRequest(request)

responseOK := make(chan bool, 1)
ctx, cancel := context.WithCancel(request.HttpRequest.Context())

request.HttpRequest = request.HttpRequest.WithContext(ctx)

go func() {
resp, respErr := roundTripper.RoundTrip(request.HttpRequest)
Expand All @@ -167,14 +170,18 @@ func (s *Session) send(request *Request) (response *Response, err error) {
return
}

err = respErr
httpResponse = resp
if err == nil {
err = respErr
httpResponse = resp

}
responseOK <- true
}()

select {
case <-timer.C:
err = fmt.Errorf("timeout")

case <-responseOK:
timer.Stop()
close(responseOK)
Expand All @@ -186,6 +193,8 @@ func (s *Session) send(request *Request) (response *Response, err error) {
}

if err != nil {
cancel()

if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) {
rConn.Close()
err = fmt.Errorf("timeout")
Expand All @@ -209,6 +218,7 @@ func (s *Session) send(request *Request) (response *Response, err error) {
s.Callback(request, response, err)
}

cancel()
return response, err

default:
Expand Down
24 changes: 24 additions & 0 deletions test/session_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -582,3 +582,27 @@ func TestSession_Context(t *testing.T) {
stop <- true
time.Sleep(1 * time.Second)
}

func TestSession_Timeout(t *testing.T) {
go func() {
session := azuretls.NewSession()
session.SetTimeout(1 * time.Second)

defer session.Close()

if err := session.SetProxy(os.Getenv("NON_SECURE_PROXY")); err != nil {
fmt.Println(err)
return
}

response, err := session.Get("https://testfile.org/files-5GB")

if err != nil {
fmt.Println(err)
} else {
fmt.Println(response.StatusCode, string(response.Body))
}
}()

time.Sleep(2 * time.Second)
}

0 comments on commit 6d318a3

Please sign in to comment.