diff --git a/insrequester/requester.go b/insrequester/requester.go index 8831e64..4163460 100644 --- a/insrequester/requester.go +++ b/insrequester/requester.go @@ -8,7 +8,6 @@ import ( "github.com/slok/goresilience/circuitbreaker" goresilienceErrors "github.com/slok/goresilience/errors" "github.com/slok/goresilience/retry" - resilienceTimeout "github.com/slok/goresilience/timeout" "net/http" "time" ) @@ -102,9 +101,9 @@ func (r *Request) sendRequest(httpMethod string, re RequestEntity) (*http.Respon re.Headers = append(r.headers, re.Headers...) // RequestEntity headers will override Requester level headers. re.applyHeadersToRequest(req) - res, outerErr = (&http.Client{Timeout: time.Duration(r.timeout) * time.Second}).Do(req) + res, outerErr = (&http.Client{Timeout: r.timeout}).Do(req) if outerErr != nil { - return nil + return ErrRetryable } if res.StatusCode >= 100 && res.StatusCode < 200 || @@ -194,11 +193,6 @@ func (r *Request) WithTimeout(timeout time.Duration) *Request { r.timeout = timeout } - mw := resilienceTimeout.NewMiddleware(resilienceTimeout.Config{ - Timeout: r.timeout, - }) - r.middlewares = append(r.middlewares, mw) - return r } diff --git a/insrequester/requester_test.go b/insrequester/requester_test.go index d9ebbbf..f826c88 100644 --- a/insrequester/requester_test.go +++ b/insrequester/requester_test.go @@ -23,7 +23,7 @@ func TestRequest_Get(t *testing.T) { assert.Equal(t, http.StatusOK, res.StatusCode) }) - t.Run("it_should_load_retrier_properly", func(t *testing.T) { + t.Run("it_should_retry_on_internal_server_error", func(t *testing.T) { retryTimes := 0 handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { retryTimes++ @@ -46,6 +46,32 @@ func TestRequest_Get(t *testing.T) { assert.Equal(t, 4, retryTimes) }) + t.Run("it_should_retry_on_timeout", func(t *testing.T) { + retryTimes := 0 + handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + retryTimes++ + time.Sleep(100 * time.Millisecond) + w.WriteHeader(http.StatusInternalServerError) + }) + + server := httptest.NewServer(handler) + defer server.Close() + + r := NewRequester(). + WithTimeout(1 * time.Millisecond). + WithRetry(RetryConfig{ + WaitBase: 20 * time.Millisecond, + Times: 3, + }).Load() + + req := RequestEntity{ + Endpoint: server.URL, + } + _, _ = r.Get(req) + + assert.Equal(t, 4, retryTimes) + }) + t.Run("it_should_load_circuit_breaker_properly", func(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusInternalServerError)