Skip to content

Commit 784ef2d

Browse files
committed
httpx should use requets with context
1 parent 267f7ba commit 784ef2d

File tree

5 files changed

+31
-13
lines changed

5 files changed

+31
-13
lines changed

httpx/http.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package httpx
22

33
import (
44
"bytes"
5+
"context"
56
"encoding/base64"
67
"errors"
78
"fmt"
@@ -161,9 +162,9 @@ func DoTrace(client *http.Client, request *http.Request, retries *RetryConfig, a
161162
return trace, nil
162163
}
163164

164-
// NewRequest is a convenience method to create a request with the given headers
165-
func NewRequest(method string, url string, body io.Reader, headers map[string]string) (*http.Request, error) {
166-
r, err := http.NewRequest(method, url, body)
165+
// NewRequest is a convenience method to create a request with the given context and headers
166+
func NewRequest(ctx context.Context, method string, url string, body io.Reader, headers map[string]string) (*http.Request, error) {
167+
r, err := http.NewRequestWithContext(ctx, method, url, body)
167168
if err != nil {
168169
return nil, err
169170
}

httpx/http_test.go

+13-6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package httpx_test
22

33
import (
44
"bytes"
5+
"context"
56
"fmt"
67
"net"
78
"net/http"
@@ -64,14 +65,16 @@ func newTestHTTPServer(port int) *httptest.Server {
6465
}
6566

6667
func TestDoTrace(t *testing.T) {
68+
ctx := context.Background()
69+
6770
defer dates.SetNowFunc(time.Now)
6871

6972
dates.SetNowFunc(dates.NewSequentialNow(time.Date(2019, 10, 7, 15, 21, 30, 123456789, time.UTC), time.Second))
7073

7174
server := newTestHTTPServer(52025)
7275

7376
// test with a text response
74-
request, err := httpx.NewRequest("GET", server.URL+"?cmd=success", nil, nil)
77+
request, err := httpx.NewRequest(ctx, "GET", server.URL+"?cmd=success", nil, nil)
7578
require.NoError(t, err)
7679

7780
trace, err := httpx.DoTrace(http.DefaultClient, request, nil, nil, -1)
@@ -89,7 +92,7 @@ func TestDoTrace(t *testing.T) {
8992
assert.Equal(t, ">>>>>>>> GET http://127.0.0.1:52025?cmd=success\nGET /?cmd=success HTTP/1.1\r\nHost: 127.0.0.1:52025\r\nUser-Agent: Go-http-client/1.1\r\nAccept-Encoding: gzip\r\n\r\n\n<<<<<<<<\nHTTP/1.1 200 OK\r\nContent-Length: 16\r\nContent-Type: text/plain; charset=utf-8\r\nDate: Wed, 11 Apr 2018 18:24:30 GMT\r\n\r\n{ \"ok\": \"true\" }", trace.String())
9093

9194
// test with a binary response
92-
request, err = httpx.NewRequest("GET", server.URL+"?cmd=binary", nil, nil)
95+
request, err = httpx.NewRequest(ctx, "GET", server.URL+"?cmd=binary", nil, nil)
9396
require.NoError(t, err)
9497

9598
trace, err = httpx.DoTrace(http.DefaultClient, request, nil, nil, -1)
@@ -100,7 +103,7 @@ func TestDoTrace(t *testing.T) {
100103
assert.Equal(t, "HTTP/1.1 200 OK\r\nContent-Length: 1000\r\nContent-Type: application/octet-stream\r\nDate: Wed, 11 Apr 2018 18:24:30 GMT\r\n\r\n...", string(trace.SanitizedResponse("...")))
101104

102105
// test with a response containing null chars
103-
request, err = httpx.NewRequest("GET", server.URL+"?cmd=nullchars", nil, nil)
106+
request, err = httpx.NewRequest(ctx, "GET", server.URL+"?cmd=nullchars", nil, nil)
104107
require.NoError(t, err)
105108

106109
trace, err = httpx.DoTrace(http.DefaultClient, request, nil, nil, -1)
@@ -111,7 +114,7 @@ func TestDoTrace(t *testing.T) {
111114
assert.Equal(t, "HTTP/1.1 200 OK\r\nContent-Length: 7\r\nContent-Type: text/plain; charset=utf-8\r\nDate: Wed, 11 Apr 2018 18:24:30 GMT\r\n\r\nab�cd��", string(trace.SanitizedResponse("...")))
112115

113116
// test with a response containing invalid UTF8 sequences
114-
request, err = httpx.NewRequest("GET", server.URL+"?cmd=badutf8", nil, nil)
117+
request, err = httpx.NewRequest(ctx, "GET", server.URL+"?cmd=badutf8", nil, nil)
115118
require.NoError(t, err)
116119

117120
trace, err = httpx.DoTrace(http.DefaultClient, request, nil, nil, -1)
@@ -164,6 +167,8 @@ func TestMaxBodyBytes(t *testing.T) {
164167
}
165168

166169
func TestNonUTF8Request(t *testing.T) {
170+
ctx := context.Background()
171+
167172
defer httpx.SetRequestor(httpx.DefaultRequestor)
168173

169174
httpx.SetRequestor(httpx.NewMockRequestor(map[string][]*httpx.MockResponse{
@@ -172,7 +177,7 @@ func TestNonUTF8Request(t *testing.T) {
172177
},
173178
}))
174179

175-
request, err := httpx.NewRequest("GET", "https://temba.io", bytes.NewReader([]byte{'\xc3', '\x28'}), map[string]string{"X-Badness": string([]byte{'\xc3', '\x28'})})
180+
request, err := httpx.NewRequest(ctx, "GET", "https://temba.io", bytes.NewReader([]byte{'\xc3', '\x28'}), map[string]string{"X-Badness": string([]byte{'\xc3', '\x28'})})
176181
require.NoError(t, err)
177182

178183
trace, err := httpx.DoTrace(http.DefaultClient, request, nil, nil, -1)
@@ -189,6 +194,8 @@ func TestNonUTF8Request(t *testing.T) {
189194
}
190195

191196
func TestNonUTF8Response(t *testing.T) {
197+
ctx := context.Background()
198+
192199
defer httpx.SetRequestor(httpx.DefaultRequestor)
193200

194201
httpx.SetRequestor(httpx.NewMockRequestor(map[string][]*httpx.MockResponse{
@@ -197,7 +204,7 @@ func TestNonUTF8Response(t *testing.T) {
197204
},
198205
}))
199206

200-
request, err := httpx.NewRequest("GET", "https://temba.io", nil, nil)
207+
request, err := httpx.NewRequest(ctx, "GET", "https://temba.io", nil, nil)
201208
require.NoError(t, err)
202209

203210
trace, err := httpx.DoTrace(http.DefaultClient, request, nil, nil, -1)

httpx/logs_test.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@ import (
99
"github.com/nyaruka/gocommon/stringsx"
1010
"github.com/stretchr/testify/assert"
1111
"github.com/stretchr/testify/require"
12+
"golang.org/x/net/context"
1213
)
1314

1415
func TestLogs(t *testing.T) {
16+
ctx := context.Background()
17+
1518
defer httpx.SetRequestor(httpx.DefaultRequestor)
1619

1720
httpx.SetRequestor(httpx.NewMockRequestor(map[string][]*httpx.MockResponse{
@@ -25,6 +28,7 @@ func TestLogs(t *testing.T) {
2528
}))
2629

2730
req1, err := httpx.NewRequest(
31+
ctx,
2832
"GET", "http://temba.io/code/987654321/long-url/rwhrehreh/erhether/yreyrreyeyreureuetutrurtueyre/y",
2933
strings.NewReader("long request long request long request long request long request long request long request long request "),
3034
nil,
@@ -40,13 +44,13 @@ func TestLogs(t *testing.T) {
4044
assert.Equal(t, "HTTP/1.0 400 Bad Request\r\nContent-Length: 97\r\n\r\nlong response...", log1.Response)
4145

4246
// create a request with a code we need to redact in the URL and in the header
43-
req2, err := httpx.NewRequest("GET", "http://temba.io/code/987654321/", nil, map[string]string{"X-Code": "987654321"})
47+
req2, err := httpx.NewRequest(ctx, "GET", "http://temba.io/code/987654321/", nil, map[string]string{"X-Code": "987654321"})
4448
require.NoError(t, err)
4549
trace2, err := httpx.DoTrace(http.DefaultClient, req2, nil, nil, -1)
4650
require.NoError(t, err)
4751

4852
// create a request with a code we need to redact in the URL and in the request body
49-
req3, err := httpx.NewRequest("GET", "http://temba.io/code/987654321/", strings.NewReader("My code is 987654321"), nil)
53+
req3, err := httpx.NewRequest(ctx, "GET", "http://temba.io/code/987654321/", strings.NewReader("My code is 987654321"), nil)
5054
require.NoError(t, err)
5155
trace3, err := httpx.DoTrace(http.DefaultClient, req3, nil, nil, -1)
5256
require.NoError(t, err)

httpx/recorder_test.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@ import (
1010
"testing"
1111

1212
"github.com/nyaruka/gocommon/httpx"
13+
"golang.org/x/net/context"
1314

1415
"github.com/stretchr/testify/assert"
1516
"github.com/stretchr/testify/require"
1617
)
1718

1819
func TestRecorder(t *testing.T) {
20+
ctx := context.Background()
21+
1922
// set by handler
2023
var readBody []byte
2124
var trace *httpx.Trace
@@ -117,7 +120,7 @@ func TestRecorder(t *testing.T) {
117120
for i, tc := range tcs {
118121
testReconstruct = tc.reconstruct
119122

120-
req, err := httpx.NewRequest(tc.method, tc.url, tc.requestBody, tc.headers)
123+
req, err := httpx.NewRequest(ctx, tc.method, tc.url, tc.requestBody, tc.headers)
121124
require.NoError(t, err)
122125

123126
_, err = httpx.Do(http.DefaultClient, req, nil, nil)

httpx/retries_test.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/nyaruka/gocommon/dates"
99
"github.com/nyaruka/gocommon/httpx"
1010
"github.com/nyaruka/gocommon/random"
11+
"golang.org/x/net/context"
1112

1213
"github.com/stretchr/testify/assert"
1314
"github.com/stretchr/testify/require"
@@ -54,6 +55,8 @@ func TestNewExponentialRetries(t *testing.T) {
5455
}
5556

5657
func TestDoWithRetries(t *testing.T) {
58+
ctx := context.Background()
59+
5760
defer httpx.SetRequestor(httpx.DefaultRequestor)
5861

5962
mocks := httpx.NewMockRequestor(map[string][]*httpx.MockResponse{
@@ -86,7 +89,7 @@ func TestDoWithRetries(t *testing.T) {
8689
httpx.SetRequestor(mocks)
8790

8891
call := func(method, url string, headers map[string]string, retries *httpx.RetryConfig) *httpx.Trace {
89-
request, err := httpx.NewRequest(method, url, nil, headers)
92+
request, err := httpx.NewRequest(ctx, method, url, nil, headers)
9093
require.NoError(t, err)
9194

9295
trace, err := httpx.DoTrace(http.DefaultClient, request, retries, nil, -1)

0 commit comments

Comments
 (0)