cleanup: remove redundant HTTPClient definition (#643)

This counts as a follow-up cleanup as part of doing
https://github.com/ooni/probe/issues/1885.
This commit is contained in:
Simone Basso 2022-01-03 16:47:54 +01:00 committed by GitHub
parent 273b70bacc
commit 43161a8138
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 19 additions and 37 deletions

View File

@ -152,7 +152,7 @@ func (mx *Measurer) runAsync(ctx context.Context, sess model.ExperimentSession,
// URL measurement flow implemented by measurex. // URL measurement flow implemented by measurex.
type measurerMeasureURLHelper struct { type measurerMeasureURLHelper struct {
// Clnt is the MANDATORY client to use // Clnt is the MANDATORY client to use
Clnt measurex.HTTPClient Clnt model.HTTPClient
// Logger is the MANDATORY Logger to use // Logger is the MANDATORY Logger to use
Logger model.Logger Logger model.Logger

View File

@ -19,6 +19,7 @@ import (
"github.com/apex/log" "github.com/apex/log"
"github.com/ooni/probe-cli/v3/internal/measurex" "github.com/ooni/probe-cli/v3/internal/measurex"
"github.com/ooni/probe-cli/v3/internal/model"
"github.com/ooni/probe-cli/v3/internal/netxlite" "github.com/ooni/probe-cli/v3/internal/netxlite"
"github.com/ooni/probe-cli/v3/internal/runtimex" "github.com/ooni/probe-cli/v3/internal/runtimex"
"github.com/ooni/probe-cli/v3/internal/version" "github.com/ooni/probe-cli/v3/internal/version"
@ -59,7 +60,7 @@ type THClient struct {
// HTTPClient is the MANDATORY HTTP client to // HTTPClient is the MANDATORY HTTP client to
// use for contacting the TH. // use for contacting the TH.
HTTPClient measurex.HTTPClient HTTPClient model.HTTPClient
// ServerURL is the MANDATORY URL of the TH HTTP endpoint. // ServerURL is the MANDATORY URL of the TH HTTP endpoint.
ServerURL string ServerURL string
@ -112,7 +113,7 @@ type THClientCall struct {
// HTTPClient is the MANDATORY HTTP client to // HTTPClient is the MANDATORY HTTP client to
// use for contacting the TH. // use for contacting the TH.
HTTPClient measurex.HTTPClient HTTPClient model.HTTPClient
// Header contains the MANDATORY request headers. // Header contains the MANDATORY request headers.
Header http.Header Header http.Header

View File

@ -193,25 +193,17 @@ type httpTransportBody struct {
io.Closer io.Closer
} }
// HTTPClient is the HTTP client type we use. This interface is
// compatible with http.Client. What changes in this kind of clients
// is that we'll insert redirection events into the WritableDB.
type HTTPClient interface {
Do(req *http.Request) (*http.Response, error)
CloseIdleConnections()
}
// NewHTTPClient creates a new HTTPClient instance that // NewHTTPClient creates a new HTTPClient instance that
// does not automatically perform redirects. // does not automatically perform redirects.
func NewHTTPClientWithoutRedirects( func NewHTTPClientWithoutRedirects(
db WritableDB, jar http.CookieJar, txp model.HTTPTransport) HTTPClient { db WritableDB, jar http.CookieJar, txp model.HTTPTransport) model.HTTPClient {
return newHTTPClient(db, jar, txp, http.ErrUseLastResponse) return newHTTPClient(db, jar, txp, http.ErrUseLastResponse)
} }
// NewHTTPClientWithRedirects creates a new HTTPClient // NewHTTPClientWithRedirects creates a new HTTPClient
// instance that automatically perform redirects. // instance that automatically perform redirects.
func NewHTTPClientWithRedirects( func NewHTTPClientWithRedirects(
db WritableDB, jar http.CookieJar, txp model.HTTPTransport) HTTPClient { db WritableDB, jar http.CookieJar, txp model.HTTPTransport) model.HTTPClient {
return newHTTPClient(db, jar, txp, nil) return newHTTPClient(db, jar, txp, nil)
} }
@ -241,7 +233,7 @@ type HTTPRedirectEvent struct {
var ErrHTTPTooManyRedirects = errors.New("stopped after 10 redirects") var ErrHTTPTooManyRedirects = errors.New("stopped after 10 redirects")
func newHTTPClient(db WritableDB, cookiejar http.CookieJar, func newHTTPClient(db WritableDB, cookiejar http.CookieJar,
txp model.HTTPTransport, defaultErr error) HTTPClient { txp model.HTTPTransport, defaultErr error) model.HTTPClient {
return netxlite.WrapHTTPClient(&http.Client{ return netxlite.WrapHTTPClient(&http.Client{
Transport: txp, Transport: txp,
Jar: cookiejar, Jar: cookiejar,

View File

@ -32,7 +32,7 @@ type Measurer struct {
Begin time.Time Begin time.Time
// HTTPClient is the MANDATORY HTTP client for the WCTH. // HTTPClient is the MANDATORY HTTP client for the WCTH.
HTTPClient HTTPClient HTTPClient model.HTTPClient
// Logger is the MANDATORY logger to use. // Logger is the MANDATORY logger to use.
Logger model.Logger Logger model.Logger
@ -496,7 +496,7 @@ func (mx *Measurer) httpEndpointGetQUIC(ctx context.Context,
} }
func (mx *Measurer) HTTPClientGET( func (mx *Measurer) HTTPClientGET(
ctx context.Context, clnt HTTPClient, URL *url.URL) (*http.Response, error) { ctx context.Context, clnt model.HTTPClient, URL *url.URL) (*http.Response, error) {
return mx.httpClientDo(ctx, clnt, &HTTPEndpoint{ return mx.httpClientDo(ctx, clnt, &HTTPEndpoint{
Domain: URL.Hostname(), Domain: URL.Hostname(),
Network: "tcp", Network: "tcp",
@ -509,7 +509,7 @@ func (mx *Measurer) HTTPClientGET(
} }
func (mx *Measurer) httpClientDo(ctx context.Context, func (mx *Measurer) httpClientDo(ctx context.Context,
clnt HTTPClient, epnt *HTTPEndpoint) (*http.Response, error) { clnt model.HTTPClient, epnt *HTTPEndpoint) (*http.Response, error) {
req, err := NewHTTPGetRequest(ctx, epnt.URL.String()) req, err := NewHTTPGetRequest(ctx, epnt.URL.String())
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -16,18 +16,12 @@ import (
"github.com/ooni/probe-cli/v3/internal/netxlite" "github.com/ooni/probe-cli/v3/internal/netxlite"
) )
// HTTPClient is anything that looks like an http.Client.
type HTTPClient interface {
// Do behaves like http.Client.Do.
Do(req *http.Request) (*http.Response, error)
}
// Client is a locate.measurementlab.net client. Please use the // Client is a locate.measurementlab.net client. Please use the
// NewClient factory to construct a new instance of client, otherwise // NewClient factory to construct a new instance of client, otherwise
// you MUST fill all the fields marked as MANDATORY. // you MUST fill all the fields marked as MANDATORY.
type Client struct { type Client struct {
// HTTPClient is the MANDATORY http client to use. // HTTPClient is the MANDATORY http client to use.
HTTPClient HTTPClient HTTPClient model.HTTPClient
// Hostname is the MANDATORY hostname of the mlablocate API. // Hostname is the MANDATORY hostname of the mlablocate API.
Hostname string Hostname string
@ -43,7 +37,7 @@ type Client struct {
} }
// NewClient creates a new locate.measurementlab.net client. // NewClient creates a new locate.measurementlab.net client.
func NewClient(httpClient HTTPClient, logger model.DebugLogger, userAgent string) *Client { func NewClient(httpClient model.HTTPClient, logger model.DebugLogger, userAgent string) *Client {
return &Client{ return &Client{
HTTPClient: httpClient, HTTPClient: httpClient,
Hostname: "locate.measurementlab.net", Hostname: "locate.measurementlab.net",

View File

@ -29,18 +29,12 @@ var (
ErrEmptyResponse = errors.New("mlablocatev2: empty response") ErrEmptyResponse = errors.New("mlablocatev2: empty response")
) )
// HTTPClient is anything that looks like an http.Client.
type HTTPClient interface {
// Do behaves like http.Client.Do.
Do(req *http.Request) (*http.Response, error)
}
// Client is a client for v2 of the locate services. Please use the // Client is a client for v2 of the locate services. Please use the
// NewClient factory to construct a new instance of client, otherwise // NewClient factory to construct a new instance of client, otherwise
// you MUST fill all the fields marked as MANDATORY. // you MUST fill all the fields marked as MANDATORY.
type Client struct { type Client struct {
// HTTPClient is the MANDATORY http client to use // HTTPClient is the MANDATORY http client to use
HTTPClient HTTPClient HTTPClient model.HTTPClient
// Hostname is the MANDATORY hostname of the mlablocate API. // Hostname is the MANDATORY hostname of the mlablocate API.
Hostname string Hostname string
@ -56,7 +50,7 @@ type Client struct {
} }
// NewClient creates a client for v2 of the locate services. // NewClient creates a client for v2 of the locate services.
func NewClient(httpClient HTTPClient, logger model.DebugLogger, userAgent string) Client { func NewClient(httpClient model.HTTPClient, logger model.DebugLogger, userAgent string) Client {
return Client{ return Client{
HTTPClient: httpClient, HTTPClient: httpClient,
Hostname: "locate.measurementlab.net", Hostname: "locate.measurementlab.net",

View File

@ -40,10 +40,7 @@ type templateExecutor interface {
// http.DefaultClient as the default HTTPClient used by Client. // http.DefaultClient as the default HTTPClient used by Client.
// Consumers of this package typically provide a custom HTTPClient // Consumers of this package typically provide a custom HTTPClient
// with additional functionality (e.g., DoH, circumvention). // with additional functionality (e.g., DoH, circumvention).
type HTTPClient interface { type HTTPClient = model.HTTPClient
// Do should work like http.Client.Do.
Do(req *http.Request) (*http.Response, error)
}
// GobCodec is a Gob encoder and decoder. Generally, we use a // GobCodec is a Gob encoder and decoder. Generally, we use a
// default GobCodec in Client. This is the interface to implement // default GobCodec in Client. This is the interface to implement

View File

@ -41,6 +41,8 @@ func (c *FakeHTTPClient) Do(req *http.Request) (*http.Response, error) {
return c.Resp, nil return c.Resp, nil
} }
func (c *FakeHTTPClient) CloseIdleConnections() {}
type FakeBody struct { type FakeBody struct {
Data []byte Data []byte
Err error Err error

View File

@ -19,3 +19,5 @@ func (c *VerboseHTTPClient) Do(req *http.Request) (*http.Response, error) {
c.T.Logf("< %d", resp.StatusCode) c.T.Logf("< %d", resp.StatusCode)
return resp, nil return resp, nil
} }
func (c *VerboseHTTPClient) CloseIdleConnections() {}