cleanup: remove unnecessary legacy interfaces (#656)
This diff addresses another point of https://github.com/ooni/probe/issues/1956: > - [ ] observe that we're still using a bunch of private interfaces for common interfaces such as the `Dialer`, so we can get rid of these private interfaces and always use the ones in `model`, which allows us to remove a bunch of legacy wrappers Additional cleanups may still be possible. The more I cleanup, the more I see there's extra legacy code we can dispose of (which seems good?).
This commit is contained in:
@@ -5,11 +5,12 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/ooni/probe-cli/v3/internal/bytecounter"
|
||||
"github.com/ooni/probe-cli/v3/internal/model"
|
||||
)
|
||||
|
||||
// ByteCountingTransport is a RoundTripper that counts bytes.
|
||||
type ByteCountingTransport struct {
|
||||
RoundTripper
|
||||
model.HTTPTransport
|
||||
Counter *bytecounter.Counter
|
||||
}
|
||||
|
||||
@@ -20,7 +21,7 @@ func (txp ByteCountingTransport) RoundTrip(req *http.Request) (*http.Response, e
|
||||
ReadCloser: req.Body, Account: txp.Counter.CountBytesSent}
|
||||
}
|
||||
txp.estimateRequestMetadata(req)
|
||||
resp, err := txp.RoundTripper.RoundTrip(req)
|
||||
resp, err := txp.HTTPTransport.RoundTrip(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -70,4 +71,4 @@ func (r byteCountingBody) Read(p []byte) (int, error) {
|
||||
return count, err
|
||||
}
|
||||
|
||||
var _ RoundTripper = ByteCountingTransport{}
|
||||
var _ model.HTTPTransport = ByteCountingTransport{}
|
||||
|
||||
@@ -17,7 +17,7 @@ func TestByteCounterFailure(t *testing.T) {
|
||||
counter := bytecounter.New()
|
||||
txp := httptransport.ByteCountingTransport{
|
||||
Counter: counter,
|
||||
RoundTripper: httptransport.FakeTransport{
|
||||
HTTPTransport: httptransport.FakeTransport{
|
||||
Err: io.EOF,
|
||||
},
|
||||
}
|
||||
@@ -47,7 +47,7 @@ func TestByteCounterSuccess(t *testing.T) {
|
||||
counter := bytecounter.New()
|
||||
txp := httptransport.ByteCountingTransport{
|
||||
Counter: counter,
|
||||
RoundTripper: httptransport.FakeTransport{
|
||||
HTTPTransport: httptransport.FakeTransport{
|
||||
Resp: &http.Response{
|
||||
Body: io.NopCloser(strings.NewReader("1234567")),
|
||||
Header: http.Header{
|
||||
@@ -89,7 +89,7 @@ func TestByteCounterSuccessWithEOF(t *testing.T) {
|
||||
counter := bytecounter.New()
|
||||
txp := httptransport.ByteCountingTransport{
|
||||
Counter: counter,
|
||||
RoundTripper: httptransport.FakeTransport{
|
||||
HTTPTransport: httptransport.FakeTransport{
|
||||
Resp: &http.Response{
|
||||
Body: bodyReaderWithEOF{},
|
||||
Header: http.Header{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package httptransport
|
||||
|
||||
import (
|
||||
"github.com/ooni/probe-cli/v3/internal/model"
|
||||
"github.com/ooni/probe-cli/v3/internal/netxlite"
|
||||
)
|
||||
|
||||
@@ -9,12 +10,11 @@ import (
|
||||
// Deprecation warning
|
||||
//
|
||||
// New code should use netxlite.NewHTTP3Transport instead.
|
||||
func NewHTTP3Transport(config Config) RoundTripper {
|
||||
func NewHTTP3Transport(config Config) model.HTTPTransport {
|
||||
// Rationale for using NoLogger here: previously this code did
|
||||
// not use a logger as well, so it's fine to keep it as is.
|
||||
return netxlite.NewHTTP3Transport(&NoLogger{},
|
||||
netxlite.NewQUICDialerFromContextDialerAdapter(config.QUICDialer),
|
||||
config.TLSConfig)
|
||||
config.QUICDialer, config.TLSConfig)
|
||||
}
|
||||
|
||||
type NoLogger struct{}
|
||||
|
||||
@@ -2,46 +2,15 @@
|
||||
package httptransport
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"net"
|
||||
"net/http"
|
||||
|
||||
"github.com/lucas-clemente/quic-go"
|
||||
"github.com/ooni/probe-cli/v3/internal/model"
|
||||
)
|
||||
|
||||
// Config contains the configuration required for constructing an HTTP transport
|
||||
type Config struct {
|
||||
Dialer Dialer
|
||||
QUICDialer QUICDialer
|
||||
TLSDialer TLSDialer
|
||||
Dialer model.Dialer
|
||||
QUICDialer model.QUICDialer
|
||||
TLSDialer model.TLSDialer
|
||||
TLSConfig *tls.Config
|
||||
}
|
||||
|
||||
// Dialer is the definition of dialer assumed by this package.
|
||||
type Dialer interface {
|
||||
DialContext(ctx context.Context, network, address string) (net.Conn, error)
|
||||
}
|
||||
|
||||
// TLSDialer is the definition of a TLS dialer assumed by this package.
|
||||
type TLSDialer interface {
|
||||
DialTLSContext(ctx context.Context, network, address string) (net.Conn, error)
|
||||
}
|
||||
|
||||
// QUICDialer is the definition of dialer for QUIC assumed by this package.
|
||||
type QUICDialer interface {
|
||||
DialContext(ctx context.Context, network, addr string, tlsCfg *tls.Config, cfg *quic.Config) (quic.EarlySession, error)
|
||||
}
|
||||
|
||||
// RoundTripper is the definition of http.RoundTripper used by this package.
|
||||
type RoundTripper interface {
|
||||
RoundTrip(req *http.Request) (*http.Response, error)
|
||||
CloseIdleConnections()
|
||||
}
|
||||
|
||||
// Resolver is the interface we expect from a resolver
|
||||
type Resolver interface {
|
||||
LookupHost(ctx context.Context, hostname string) (addrs []string, err error)
|
||||
Network() string
|
||||
Address() string
|
||||
}
|
||||
|
||||
@@ -10,13 +10,14 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/netx/trace"
|
||||
"github.com/ooni/probe-cli/v3/internal/model"
|
||||
"github.com/ooni/probe-cli/v3/internal/netxlite"
|
||||
)
|
||||
|
||||
// SaverPerformanceHTTPTransport is a RoundTripper that saves
|
||||
// performance events occurring during the round trip
|
||||
type SaverPerformanceHTTPTransport struct {
|
||||
RoundTripper
|
||||
model.HTTPTransport
|
||||
Saver *trace.Saver
|
||||
}
|
||||
|
||||
@@ -38,13 +39,13 @@ func (txp SaverPerformanceHTTPTransport) RoundTrip(req *http.Request) (*http.Res
|
||||
}
|
||||
req = req.WithContext(httptrace.WithClientTrace(req.Context(), tracep))
|
||||
}
|
||||
return txp.RoundTripper.RoundTrip(req)
|
||||
return txp.HTTPTransport.RoundTrip(req)
|
||||
}
|
||||
|
||||
// SaverMetadataHTTPTransport is a RoundTripper that saves
|
||||
// events related to HTTP request and response metadata
|
||||
type SaverMetadataHTTPTransport struct {
|
||||
RoundTripper
|
||||
model.HTTPTransport
|
||||
Saver *trace.Saver
|
||||
Transport string
|
||||
}
|
||||
@@ -59,7 +60,7 @@ func (txp SaverMetadataHTTPTransport) RoundTrip(req *http.Request) (*http.Respon
|
||||
Name: "http_request_metadata",
|
||||
Time: time.Now(),
|
||||
})
|
||||
resp, err := txp.RoundTripper.RoundTrip(req)
|
||||
resp, err := txp.HTTPTransport.RoundTrip(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -88,7 +89,7 @@ func (txp SaverMetadataHTTPTransport) CloneHeaders(req *http.Request) http.Heade
|
||||
// SaverTransactionHTTPTransport is a RoundTripper that saves
|
||||
// events related to the HTTP transaction
|
||||
type SaverTransactionHTTPTransport struct {
|
||||
RoundTripper
|
||||
model.HTTPTransport
|
||||
Saver *trace.Saver
|
||||
}
|
||||
|
||||
@@ -98,7 +99,7 @@ func (txp SaverTransactionHTTPTransport) RoundTrip(req *http.Request) (*http.Res
|
||||
Name: "http_transaction_start",
|
||||
Time: time.Now(),
|
||||
})
|
||||
resp, err := txp.RoundTripper.RoundTrip(req)
|
||||
resp, err := txp.HTTPTransport.RoundTrip(req)
|
||||
txp.Saver.Write(trace.Event{
|
||||
Err: err,
|
||||
Name: "http_transaction_done",
|
||||
@@ -110,7 +111,7 @@ func (txp SaverTransactionHTTPTransport) RoundTrip(req *http.Request) (*http.Res
|
||||
// SaverBodyHTTPTransport is a RoundTripper that saves
|
||||
// body events occurring during the round trip
|
||||
type SaverBodyHTTPTransport struct {
|
||||
RoundTripper
|
||||
model.HTTPTransport
|
||||
Saver *trace.Saver
|
||||
SnapshotSize int
|
||||
}
|
||||
@@ -135,7 +136,7 @@ func (txp SaverBodyHTTPTransport) RoundTrip(req *http.Request) (*http.Response,
|
||||
Time: time.Now(),
|
||||
})
|
||||
}
|
||||
resp, err := txp.RoundTripper.RoundTrip(req)
|
||||
resp, err := txp.HTTPTransport.RoundTrip(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -184,7 +185,7 @@ type saverReadCloser struct {
|
||||
io.Reader
|
||||
}
|
||||
|
||||
var _ RoundTripper = SaverPerformanceHTTPTransport{}
|
||||
var _ RoundTripper = SaverMetadataHTTPTransport{}
|
||||
var _ RoundTripper = SaverBodyHTTPTransport{}
|
||||
var _ RoundTripper = SaverTransactionHTTPTransport{}
|
||||
var _ model.HTTPTransport = SaverPerformanceHTTPTransport{}
|
||||
var _ model.HTTPTransport = SaverMetadataHTTPTransport{}
|
||||
var _ model.HTTPTransport = SaverBodyHTTPTransport{}
|
||||
var _ model.HTTPTransport = SaverTransactionHTTPTransport{}
|
||||
|
||||
@@ -22,12 +22,12 @@ func TestSaverPerformanceNoMultipleEvents(t *testing.T) {
|
||||
saver := &trace.Saver{}
|
||||
// register twice - do we see events twice?
|
||||
txp := httptransport.SaverPerformanceHTTPTransport{
|
||||
RoundTripper: http.DefaultTransport.(*http.Transport),
|
||||
Saver: saver,
|
||||
HTTPTransport: http.DefaultTransport.(*http.Transport),
|
||||
Saver: saver,
|
||||
}
|
||||
txp = httptransport.SaverPerformanceHTTPTransport{
|
||||
RoundTripper: txp,
|
||||
Saver: saver,
|
||||
HTTPTransport: txp,
|
||||
Saver: saver,
|
||||
}
|
||||
req, err := http.NewRequest("GET", "https://www.google.com", nil)
|
||||
if err != nil {
|
||||
@@ -67,8 +67,8 @@ func TestSaverMetadataSuccess(t *testing.T) {
|
||||
}
|
||||
saver := &trace.Saver{}
|
||||
txp := httptransport.SaverMetadataHTTPTransport{
|
||||
RoundTripper: http.DefaultTransport.(*http.Transport),
|
||||
Saver: saver,
|
||||
HTTPTransport: http.DefaultTransport.(*http.Transport),
|
||||
Saver: saver,
|
||||
}
|
||||
req, err := http.NewRequest("GET", "https://www.google.com", nil)
|
||||
if err != nil {
|
||||
@@ -121,7 +121,7 @@ func TestSaverMetadataFailure(t *testing.T) {
|
||||
expected := errors.New("mocked error")
|
||||
saver := &trace.Saver{}
|
||||
txp := httptransport.SaverMetadataHTTPTransport{
|
||||
RoundTripper: httptransport.FakeTransport{
|
||||
HTTPTransport: httptransport.FakeTransport{
|
||||
Err: expected,
|
||||
},
|
||||
Saver: saver,
|
||||
@@ -165,8 +165,8 @@ func TestSaverTransactionSuccess(t *testing.T) {
|
||||
}
|
||||
saver := &trace.Saver{}
|
||||
txp := httptransport.SaverTransactionHTTPTransport{
|
||||
RoundTripper: http.DefaultTransport.(*http.Transport),
|
||||
Saver: saver,
|
||||
HTTPTransport: http.DefaultTransport.(*http.Transport),
|
||||
Saver: saver,
|
||||
}
|
||||
req, err := http.NewRequest("GET", "https://www.google.com", nil)
|
||||
if err != nil {
|
||||
@@ -206,7 +206,7 @@ func TestSaverTransactionFailure(t *testing.T) {
|
||||
expected := errors.New("mocked error")
|
||||
saver := &trace.Saver{}
|
||||
txp := httptransport.SaverTransactionHTTPTransport{
|
||||
RoundTripper: httptransport.FakeTransport{
|
||||
HTTPTransport: httptransport.FakeTransport{
|
||||
Err: expected,
|
||||
},
|
||||
Saver: saver,
|
||||
@@ -246,7 +246,7 @@ func TestSaverTransactionFailure(t *testing.T) {
|
||||
func TestSaverBodySuccess(t *testing.T) {
|
||||
saver := new(trace.Saver)
|
||||
txp := httptransport.SaverBodyHTTPTransport{
|
||||
RoundTripper: httptransport.FakeTransport{
|
||||
HTTPTransport: httptransport.FakeTransport{
|
||||
Func: func(req *http.Request) (*http.Response, error) {
|
||||
data, err := netxlite.ReadAllContext(context.Background(), req.Body)
|
||||
if err != nil {
|
||||
@@ -317,7 +317,7 @@ func TestSaverBodySuccess(t *testing.T) {
|
||||
func TestSaverBodyRequestReadError(t *testing.T) {
|
||||
saver := new(trace.Saver)
|
||||
txp := httptransport.SaverBodyHTTPTransport{
|
||||
RoundTripper: httptransport.FakeTransport{
|
||||
HTTPTransport: httptransport.FakeTransport{
|
||||
Func: func(req *http.Request) (*http.Response, error) {
|
||||
panic("should not be called")
|
||||
},
|
||||
@@ -348,7 +348,7 @@ func TestSaverBodyRoundTripError(t *testing.T) {
|
||||
saver := new(trace.Saver)
|
||||
expected := errors.New("mocked error")
|
||||
txp := httptransport.SaverBodyHTTPTransport{
|
||||
RoundTripper: httptransport.FakeTransport{
|
||||
HTTPTransport: httptransport.FakeTransport{
|
||||
Err: expected,
|
||||
},
|
||||
SnapshotSize: 4,
|
||||
@@ -388,7 +388,7 @@ func TestSaverBodyResponseReadError(t *testing.T) {
|
||||
saver := new(trace.Saver)
|
||||
expected := errors.New("mocked error")
|
||||
txp := httptransport.SaverBodyHTTPTransport{
|
||||
RoundTripper: httptransport.FakeTransport{
|
||||
HTTPTransport: httptransport.FakeTransport{
|
||||
Func: func(req *http.Request) (*http.Response, error) {
|
||||
return &http.Response{
|
||||
StatusCode: 200,
|
||||
|
||||
@@ -2,6 +2,8 @@ package httptransport
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/ooni/probe-cli/v3/internal/model"
|
||||
)
|
||||
|
||||
// NewSystemTransport creates a new "system" HTTP transport. That is a transport
|
||||
@@ -10,7 +12,7 @@ import (
|
||||
// Deprecation warning
|
||||
//
|
||||
// New code should use netxlite.NewHTTPTransport instead.
|
||||
func NewSystemTransport(config Config) RoundTripper {
|
||||
func NewSystemTransport(config Config) model.HTTPTransport {
|
||||
txp := http.DefaultTransport.(*http.Transport).Clone()
|
||||
txp.DialContext = config.Dialer.DialContext
|
||||
txp.DialTLSContext = config.TLSDialer.DialTLSContext
|
||||
@@ -25,4 +27,4 @@ func NewSystemTransport(config Config) RoundTripper {
|
||||
return txp
|
||||
}
|
||||
|
||||
var _ RoundTripper = &http.Transport{}
|
||||
var _ model.HTTPTransport = &http.Transport{}
|
||||
|
||||
Reference in New Issue
Block a user