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:
Simone Basso
2022-01-07 18:33:37 +01:00
committed by GitHub
parent 1c057d322d
commit 566c6b246a
76 changed files with 328 additions and 736 deletions
+2 -1
View File
@@ -5,12 +5,13 @@ import (
"net"
"github.com/ooni/probe-cli/v3/internal/bytecounter"
"github.com/ooni/probe-cli/v3/internal/model"
)
// byteCounterDialer is a byte-counting-aware dialer. To perform byte counting, you
// should make sure that you insert this dialer in the dialing chain.
type byteCounterDialer struct {
Dialer
model.Dialer
}
// DialContext implements Dialer.DialContext
@@ -16,7 +16,7 @@ import (
func dorequest(ctx context.Context, url string) error {
txp := http.DefaultTransport.(*http.Transport).Clone()
defer txp.CloseIdleConnections()
dialer := &byteCounterDialer{Dialer: new(net.Dialer)}
dialer := &byteCounterDialer{Dialer: netxlite.DefaultDialer}
txp.DialContext = dialer.DialContext
client := &http.Client{Transport: txp}
req, err := http.NewRequestWithContext(ctx, "GET", "http://www.google.com", nil)
+5 -19
View File
@@ -1,8 +1,6 @@
package dialer
import (
"context"
"net"
"net/url"
"github.com/ooni/probe-cli/v3/internal/engine/netx/trace"
@@ -10,18 +8,6 @@ import (
"github.com/ooni/probe-cli/v3/internal/netxlite"
)
// Dialer establishes network connections.
type Dialer interface {
// DialContext behaves like net.Dialer.DialContext.
DialContext(ctx context.Context, network, address string) (net.Conn, error)
}
// Resolver is the interface we expect from a DNS resolver.
type Resolver interface {
// LookupHost behaves like net.Resolver.LookupHost.
LookupHost(ctx context.Context, hostname string) (addrs []string, err error)
}
// Config contains the settings for New.
type Config struct {
// ContextByteCounting optionally configures context-based
@@ -59,11 +45,11 @@ type Config struct {
}
// New creates a new Dialer from the specified config and resolver.
func New(config *Config, resolver Resolver) Dialer {
var d Dialer = &netxlite.ErrorWrapperDialer{Dialer: netxlite.DefaultDialer}
func New(config *Config, resolver model.Resolver) model.Dialer {
var d model.Dialer = &netxlite.ErrorWrapperDialer{Dialer: netxlite.DefaultDialer}
if config.Logger != nil {
d = &netxlite.DialerLogger{
Dialer: netxlite.NewDialerLegacyAdapter(d),
Dialer: d,
DebugLogger: config.Logger,
}
}
@@ -74,8 +60,8 @@ func New(config *Config, resolver Resolver) Dialer {
d = &saverConnDialer{Dialer: d, Saver: config.ReadWriteSaver}
}
d = &netxlite.DialerResolver{
Resolver: netxlite.NewResolverLegacyAdapter(resolver),
Dialer: netxlite.NewDialerLegacyAdapter(d),
Resolver: resolver,
Dialer: d,
}
d = &proxyDialer{ProxyURL: config.ProxyURL, Dialer: d}
if config.ContextByteCounting {
+3 -12
View File
@@ -1,7 +1,6 @@
package dialer
import (
"net"
"net/url"
"testing"
@@ -18,7 +17,7 @@ func TestNewCreatesTheExpectedChain(t *testing.T) {
Logger: log.Log,
ProxyURL: &url.URL{},
ReadWriteSaver: saver,
}, &net.Resolver{})
}, netxlite.DefaultResolver)
shd, ok := dlr.(*shapingDialer)
if !ok {
t.Fatal("not a shapingDialer")
@@ -35,11 +34,7 @@ func TestNewCreatesTheExpectedChain(t *testing.T) {
if !ok {
t.Fatal("not a dnsDialer")
}
dad, ok := dnsd.Dialer.(*netxlite.DialerLegacyAdapter)
if !ok {
t.Fatal("invalid type")
}
scd, ok := dad.DialerLegacy.(*saverConnDialer)
scd, ok := dnsd.Dialer.(*saverConnDialer)
if !ok {
t.Fatal("not a saverConnDialer")
}
@@ -51,11 +46,7 @@ func TestNewCreatesTheExpectedChain(t *testing.T) {
if !ok {
t.Fatal("not a loggingDialer")
}
dad, ok = ld.Dialer.(*netxlite.DialerLegacyAdapter)
if !ok {
t.Fatal("invalid type")
}
ewd, ok := dad.DialerLegacy.(*netxlite.ErrorWrapperDialer)
ewd, ok := ld.Dialer.(*netxlite.ErrorWrapperDialer)
if !ok {
t.Fatal("not an errorWrappingDialer")
}
+2 -2
View File
@@ -2,11 +2,11 @@ package dialer_test
import (
"context"
"net"
"github.com/apex/log"
"github.com/ooni/probe-cli/v3/internal/engine/netx/dialer"
"github.com/ooni/probe-cli/v3/internal/engine/netx/trace"
"github.com/ooni/probe-cli/v3/internal/netxlite"
)
func Example() {
@@ -16,7 +16,7 @@ func Example() {
DialSaver: saver,
Logger: log.Log,
ReadWriteSaver: saver,
}, &net.Resolver{})
}, netxlite.DefaultResolver)
ctx := context.Background()
conn, err := dlr.DialContext(ctx, "tcp", "8.8.8.8:53")
@@ -1,12 +1,12 @@
package dialer_test
import (
"net"
"net/http"
"testing"
"github.com/apex/log"
"github.com/ooni/probe-cli/v3/internal/engine/netx/dialer"
"github.com/ooni/probe-cli/v3/internal/netxlite"
)
func TestDialerNewSuccess(t *testing.T) {
@@ -14,7 +14,7 @@ func TestDialerNewSuccess(t *testing.T) {
t.Skip("skip test in short mode")
}
log.SetLevel(log.DebugLevel)
d := dialer.New(&dialer.Config{Logger: log.Log}, &net.Resolver{})
d := dialer.New(&dialer.Config{Logger: log.Log}, netxlite.DefaultResolver)
txp := &http.Transport{DialContext: d.DialContext}
client := &http.Client{Transport: txp}
resp, err := client.Get("http://www.google.com")
+3 -2
View File
@@ -6,6 +6,7 @@ import (
"net"
"net/url"
"github.com/ooni/probe-cli/v3/internal/model"
"golang.org/x/net/proxy"
)
@@ -13,7 +14,7 @@ import (
// dialer is a passthrough for the next Dialer in chain. Otherwise, it will internally
// create a SOCKS5 dialer that will connect to the proxy using the underlying Dialer.
type proxyDialer struct {
Dialer
model.Dialer
ProxyURL *url.URL
}
@@ -47,7 +48,7 @@ func (d *proxyDialer) dial(
//
// See https://git.io/JfJ4g.
type proxyDialerWrapper struct {
Dialer
model.Dialer
}
func (d *proxyDialerWrapper) Dial(network, address string) (net.Conn, error) {
+5 -4
View File
@@ -6,12 +6,13 @@ 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"
)
// saverDialer saves events occurring during the dial
type saverDialer struct {
Dialer
model.Dialer
Saver *trace.Saver
}
@@ -34,7 +35,7 @@ func (d *saverDialer) DialContext(ctx context.Context, network, address string)
// saverConnDialer wraps the returned connection such that we
// collect all the read/write events that occur.
type saverConnDialer struct {
Dialer
model.Dialer
Saver *trace.Saver
}
@@ -82,6 +83,6 @@ func (c *saverConn) Write(p []byte) (int, error) {
return count, err
}
var _ Dialer = &saverDialer{}
var _ Dialer = &saverConnDialer{}
var _ model.Dialer = &saverDialer{}
var _ model.Dialer = &saverConnDialer{}
var _ net.Conn = &saverConn{}
@@ -6,13 +6,15 @@ package dialer
import (
"context"
"net"
"github.com/ooni/probe-cli/v3/internal/model"
)
// shapingDialer ensures we don't use too much bandwidth
// when using integration tests at GitHub. To select
// the implementation with shaping use `-tags shaping`.
type shapingDialer struct {
Dialer
model.Dialer
}
// DialContext implements Dialer.DialContext
@@ -7,13 +7,15 @@ import (
"context"
"net"
"time"
"github.com/ooni/probe-cli/v3/internal/model"
)
// shapingDialer ensures we don't use too much bandwidth
// when using integration tests at GitHub. To select
// the implementation with shaping use `-tags shaping`.
type shapingDialer struct {
Dialer
model.Dialer
}
// DialContext implements Dialer.DialContext
+3 -2
View File
@@ -1,13 +1,14 @@
package dialer
import (
"net"
"net/http"
"testing"
"github.com/ooni/probe-cli/v3/internal/netxlite"
)
func TestShapingDialerGood(t *testing.T) {
d := &shapingDialer{Dialer: &net.Dialer{}}
d := &shapingDialer{Dialer: netxlite.DefaultDialer}
txp := &http.Transport{DialContext: d.DialContext}
client := &http.Client{Transport: txp}
resp, err := client.Get("https://www.google.com/")