package httpclient import ( "context" "net/http" "net/http/httptest" "testing" "time" ) func TestDoWithRetry_retriesOn500(t *testing.T) { var calls int srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { calls++ if calls < 3 { http.Error(w, "fail", http.StatusBadGateway) return } w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte("ok")) })) defer srv.Close() req, err := http.NewRequest(http.MethodGet, srv.URL, nil) if err != nil { t.Fatal(err) } resp, err := DoWithRetry(context.Background(), New(5*time.Second), req, 3) if err != nil { t.Fatal(err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { t.Fatalf("status %d", resp.StatusCode) } if calls != 3 { t.Fatalf("want 3 calls, got %d", calls) } }