Skip to content
This repository was archived by the owner on Jan 15, 2024. It is now read-only.

Commit ff02ac6

Browse files
Merge pull request #43 from grafana/fix-client-error-handling
Fix `client.go` error handling
2 parents 63885df + c2d367d commit ff02ac6

File tree

2 files changed

+32
-13
lines changed

2 files changed

+32
-13
lines changed

client.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,16 @@ func New(baseURL string, cfg Config) (*Client, error) {
6262
}
6363

6464
func (c *Client) request(method, requestPath string, query url.Values, body io.Reader, responseStruct interface{}) error {
65-
var resp *http.Response
66-
var err error
67-
var bodyContents []byte
65+
var (
66+
req *http.Request
67+
resp *http.Response
68+
err error
69+
bodyContents []byte
70+
)
6871

6972
// retry logic
7073
for n := 0; n <= c.config.NumRetries; n++ {
71-
r, err := c.newRequest(method, requestPath, query, body)
74+
req, err = c.newRequest(method, requestPath, query, body)
7275
if err != nil {
7376
return err
7477
}
@@ -78,7 +81,7 @@ func (c *Client) request(method, requestPath string, query url.Values, body io.R
7881
time.Sleep(time.Second * 5)
7982
}
8083

81-
resp, err = c.client.Do(r)
84+
resp, err = c.client.Do(req)
8285

8386
// If err is not nil, retry again
8487
// That's either caused by client policy, or failure to speak HTTP (such as network connectivity problem). A

client_test.go

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func TestNew_invalidURL(t *testing.T) {
5858

5959
expected := "parse \"://my-grafana.com\": missing protocol scheme"
6060
if err.Error() != expected {
61-
t.Errorf("expected error: %v; got: %s", expected, err.Error())
61+
t.Errorf("expected error: %v; got: %s", expected, err)
6262
}
6363
}
6464

@@ -68,7 +68,7 @@ func TestRequest_200(t *testing.T) {
6868

6969
err := client.request("GET", "/foo", url.Values{}, nil, nil)
7070
if err != nil {
71-
t.Errorf(err.Error())
71+
t.Error(err)
7272
}
7373
}
7474

@@ -78,7 +78,7 @@ func TestRequest_201(t *testing.T) {
7878

7979
err := client.request("GET", "/foo", url.Values{}, nil, nil)
8080
if err != nil {
81-
t.Errorf(err.Error())
81+
t.Error(err)
8282
}
8383
}
8484

@@ -89,7 +89,7 @@ func TestRequest_400(t *testing.T) {
8989
expected := `status: 400, body: {"foo":"bar"}`
9090
err := client.request("GET", "/foo", url.Values{}, nil, nil)
9191
if err.Error() != expected {
92-
t.Errorf("expected error: %v; got: %s", expected, err.Error())
92+
t.Errorf("expected error: %v; got: %s", expected, err)
9393
}
9494
}
9595

@@ -100,7 +100,23 @@ func TestRequest_500(t *testing.T) {
100100
expected := `status: 500, body: {"foo":"bar"}`
101101
err := client.request("GET", "/foo", url.Values{}, nil, nil)
102102
if err.Error() != expected {
103-
t.Errorf("expected error: %v; got: %s", expected, err.Error())
103+
t.Errorf("expected error: %v; got: %s", expected, err)
104+
}
105+
}
106+
107+
func TestRequest_badURL(t *testing.T) {
108+
server, client := gapiTestTools(t, 200, `{"foo":"bar"}`)
109+
baseURL, err := url.Parse("bad-url")
110+
if err != nil {
111+
t.Fatal(err)
112+
}
113+
client.baseURL = *baseURL
114+
defer server.Close()
115+
116+
expected := `Get "bad-url/foo": unsupported protocol scheme ""`
117+
err = client.request("GET", "/foo", url.Values{}, nil, nil)
118+
if err.Error() != expected {
119+
t.Errorf("expected error: %v; got: %s", expected, err)
104120
}
105121
}
106122

@@ -113,7 +129,7 @@ func TestRequest_200Unmarshal(t *testing.T) {
113129
}{}
114130
err := client.request("GET", "/foo", url.Values{}, nil, &result)
115131
if err != nil {
116-
t.Fatal(err.Error())
132+
t.Fatal(err)
117133
}
118134

119135
if result.Foo != "bar" {
@@ -130,7 +146,7 @@ func TestRequest_200UnmarshalPut(t *testing.T) {
130146
}
131147
data, err := json.Marshal(u)
132148
if err != nil {
133-
t.Fatal(err.Error())
149+
t.Fatal(err)
134150
}
135151

136152
result := struct {
@@ -140,7 +156,7 @@ func TestRequest_200UnmarshalPut(t *testing.T) {
140156
q.Add("a", "b")
141157
err = client.request("PUT", "/foo", q, bytes.NewBuffer(data), &result)
142158
if err != nil {
143-
t.Errorf(err.Error())
159+
t.Error(err)
144160
}
145161

146162
if result.Name != "mike" {

0 commit comments

Comments
 (0)