"errors"
"io"
"net/http"
+ "net/http/httptest"
"testing"
"time"
}{
{
name: "plain HTTP",
- req: mustNewRequest(http.MethodGet, "http://www.example.org/", nil),
+ req: httptest.NewRequest(http.MethodGet, "http://www.example.org/", nil),
expectedErr: "http3: unsupported protocol scheme: http",
},
{
name: "missing URL",
req: func() *http.Request {
- r := mustNewRequest(http.MethodGet, "https://www.example.org/", nil)
+ r := httptest.NewRequest(http.MethodGet, "https://www.example.org/", nil)
r.URL = nil
return r
}(),
{
name: "missing URL Host",
req: func() *http.Request {
- r := mustNewRequest(http.MethodGet, "https://www.example.org/", nil)
+ r := httptest.NewRequest(http.MethodGet, "https://www.example.org/", nil)
r.URL.Host = ""
return r
}(),
{
name: "missing header",
req: func() *http.Request {
- r := mustNewRequest(http.MethodGet, "https://www.example.org/", nil)
+ r := httptest.NewRequest(http.MethodGet, "https://www.example.org/", nil)
r.Header = nil
return r
}(),
{
name: "invalid header name",
req: func() *http.Request {
- r := mustNewRequest(http.MethodGet, "https://www.example.org/", nil)
+ r := httptest.NewRequest(http.MethodGet, "https://www.example.org/", nil)
r.Header.Add("foobär", "value")
return r
}(),
{
name: "invalid header value",
req: func() *http.Request {
- r := mustNewRequest(http.MethodGet, "https://www.example.org/", nil)
+ r := httptest.NewRequest(http.MethodGet, "https://www.example.org/", nil)
r.Header.Add("foo", string([]byte{0x7}))
return r
}(),
{
name: "invalid method",
req: func() *http.Request {
- r := mustNewRequest(http.MethodGet, "https://www.example.org/", nil)
+ r := httptest.NewRequest(http.MethodGet, "https://www.example.org/", nil)
r.Method = "foobär"
return r
}(),
}
t.Run("port set", func(t *testing.T) {
- req := mustNewRequest(http.MethodGet, "https://quic-go.net:1234", nil)
+ req := httptest.NewRequest(http.MethodGet, "https://quic-go.net:1234", nil)
_, err := tr.RoundTripOpt(req, RoundTripOpt{})
require.EqualError(t, err, "test done")
select {
// if the request doesn't have a port, the default port is used
t.Run("port not set", func(t *testing.T) {
- req := mustNewRequest(http.MethodGet, "https://quic-go.net", nil)
+ req := httptest.NewRequest(http.MethodGet, "https://quic-go.net", nil)
_, err := tr.RoundTripOpt(req, RoundTripOpt{})
require.EqualError(t, err, "test done")
select {
return nil, assert.AnError
},
}
- req := mustNewRequest(http.MethodGet, "https://example.com", nil)
+ req := httptest.NewRequest(http.MethodGet, "https://example.com", nil)
_, err := tr.RoundTripOpt(req, RoundTripOpt{})
require.ErrorIs(t, err, assert.AnError)
})
return nil, nil
},
}
- req := mustNewRequest(http.MethodGet, "https://example.com", nil)
+ req := httptest.NewRequest(http.MethodGet, "https://example.com", nil)
_, err := tr.RoundTripOpt(req, RoundTripOpt{})
require.EqualError(t, err, "HTTP Datagrams enabled, but QUIC Datagrams disabled")
})
Versions: []quic.Version{protocol.Version2, protocol.Version1},
}
tr := &Transport{QUICConfig: qconf}
- req := mustNewRequest(http.MethodGet, "https://example.com", nil)
+ req := httptest.NewRequest(http.MethodGet, "https://example.com", nil)
_, err := tr.RoundTrip(req)
require.EqualError(t, err, "can only use a single QUIC version for dialing a HTTP/3 connection")
}
newClientConn: func(quic.EarlyConnection) clientConn { return cl },
}
- req1 := mustNewRequest("GET", "https://quic-go.net/file1.html", nil)
+ req1 := httptest.NewRequest(http.MethodGet, "https://quic-go.net/file1.html", nil)
// if OnlyCachedConn is set, no connection is dialed
_, err := tr.RoundTripOpt(req1, RoundTripOpt{OnlyCachedConn: true})
require.ErrorIs(t, err, ErrNoCachedConn)
require.Equal(t, 1, dialCount)
// ... which is then used for the second request
- req2 := mustNewRequest("GET", "https://quic-go.net/file2.html", nil)
+ req2 := httptest.NewRequest(http.MethodGet, "https://quic-go.net/file2.html", nil)
cl.EXPECT().RoundTrip(req2).Return(&http.Response{Request: req2}, nil)
rsp, err = tr.RoundTrip(req2)
require.NoError(t, err)
}
// the first request succeeds
- req1 := mustNewRequest("GET", "https://quic-go.net/file1.html", nil)
+ req1 := httptest.NewRequest(http.MethodGet, "https://quic-go.net/file1.html", nil)
cl.EXPECT().RoundTrip(req1).Return(&http.Response{Request: req1}, nil)
rsp, err := tr.RoundTrip(req1)
require.NoError(t, err)
require.Equal(t, 1, dialCount)
// the second request reuses the QUIC connection, and encounters an error
- req2 := mustNewRequest("GET", "https://quic-go.net/file2.html", nil)
+ req2 := httptest.NewRequest(http.MethodGet, "https://quic-go.net/file2.html", nil)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
if connClosed {
return
}
currentDialCount := dialCount
- req3 := mustNewRequest("GET", "https://quic-go.net/file3.html", nil)
+ req3 := httptest.NewRequest(http.MethodGet, "https://quic-go.net/file3.html", nil)
cl.EXPECT().RoundTrip(req3).Return(&http.Response{Request: req3}, nil)
rsp, err = tr.RoundTrip(req3)
require.NoError(t, err)
}
// the first request succeeds
- req1 := mustNewRequest("GET", "https://quic-go.net/file1.html", nil)
+ req1 := httptest.NewRequest(http.MethodGet, "https://quic-go.net/file1.html", nil)
cl.EXPECT().RoundTrip(req1).Return(&http.Response{Request: req1}, nil)
rsp, err := tr.RoundTrip(req1)
require.NoError(t, err)
require.Equal(t, 1, dialCount)
// the second request reuses the QUIC connection, and runs into the cancelled context
- req2 := mustNewRequest("GET", "https://quic-go.net/file2.html", nil)
+ req2 := httptest.NewRequest(http.MethodGet, "https://quic-go.net/file2.html", nil)
ctx, cancel := context.WithCancel(context.Background())
req2 = req2.WithContext(ctx)
cl.EXPECT().RoundTrip(req2).DoAndReturn(
require.Equal(t, 1, dialCount)
// the next request reuses the QUIC connection
- req3 := mustNewRequest("GET", "https://quic-go.net/file2.html", nil)
+ req3 := httptest.NewRequest(http.MethodGet, "https://quic-go.net/file2.html", nil)
cl.EXPECT().RoundTrip(req3).Return(&http.Response{Request: req3}, nil)
rsp, err = tr.RoundTrip(req3)
require.NoError(t, err)
newClientConn: func(quic.EarlyConnection) clientConn { return cl },
}
- req1 := mustNewRequest("GET", "https://quic-go.net/file1.html", nil)
+ req1 := httptest.NewRequest(http.MethodGet, "https://quic-go.net/file1.html", nil)
_, err := tr.RoundTrip(req1)
require.ErrorIs(t, err, assert.AnError)
require.Equal(t, 1, dialCount)
- req2 := mustNewRequest("GET", "https://quic-go.net/file2.html", nil)
+ req2 := httptest.NewRequest(http.MethodGet, "https://quic-go.net/file2.html", nil)
cl.EXPECT().RoundTrip(req2).Return(&http.Response{Request: req2}, nil)
rsp, err := tr.RoundTrip(req2)
require.NoError(t, err)
return cl
},
}
- req := mustNewRequest(http.MethodGet, "https://quic-go.net/foobar.html", nil)
+ req := httptest.NewRequest(http.MethodGet, "https://quic-go.net/foobar.html", nil)
_, err := tr.RoundTrip(req)
require.NoError(t, err)
conn.EXPECT().CloseWithError(quic.ApplicationErrorCode(0), "")
return nil, err
},
}
- req := mustNewRequest(http.MethodGet, "https://quic-go.net/foobar.html", nil)
+ req := httptest.NewRequest(http.MethodGet, "https://quic-go.net/foobar.html", nil)
errChan := make(chan error, 1)
go func() {
return cl
},
}
- req1 := mustNewRequest(http.MethodGet, "https://site1.com", nil)
- req2 := mustNewRequest(http.MethodGet, "https://site2.com", nil)
+ req1 := httptest.NewRequest(http.MethodGet, "https://site1.com", nil)
+ req2 := httptest.NewRequest(http.MethodGet, "https://site2.com", nil)
require.NotEqual(t, req1.Host, req2.Host)
ctx1, cancel1 := context.WithCancel(context.Background())
ctx2, cancel2 := context.WithCancel(context.Background())