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,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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,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")
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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/")
|
||||
|
||||
Reference in New Issue
Block a user