refactor(dialer): it should close idle connections (#457)
Like we did before for the resolver, a dialer should propagate the request to close idle connections to underlying types. See https://github.com/ooni/probe/issues/1591
This commit is contained in:
@@ -72,7 +72,10 @@ func New(config *Config, resolver Resolver) Dialer {
|
||||
var d Dialer = netxlite.DefaultDialer
|
||||
d = &errorsx.ErrorWrapperDialer{Dialer: d}
|
||||
if config.Logger != nil {
|
||||
d = &netxlite.DialerLogger{Dialer: d, Logger: config.Logger}
|
||||
d = &netxlite.DialerLogger{
|
||||
Dialer: netxlite.NewDialerLegacyAdapter(d),
|
||||
Logger: config.Logger,
|
||||
}
|
||||
}
|
||||
if config.DialSaver != nil {
|
||||
d = &saverDialer{Dialer: d, Saver: config.DialSaver}
|
||||
@@ -82,7 +85,7 @@ func New(config *Config, resolver Resolver) Dialer {
|
||||
}
|
||||
d = &netxlite.DialerResolver{
|
||||
Resolver: netxlite.NewResolverLegacyAdapter(resolver),
|
||||
Dialer: d,
|
||||
Dialer: netxlite.NewDialerLegacyAdapter(d),
|
||||
}
|
||||
d = &proxyDialer{ProxyURL: config.ProxyURL, Dialer: d}
|
||||
if config.ContextByteCounting {
|
||||
|
||||
@@ -36,7 +36,11 @@ func TestNewCreatesTheExpectedChain(t *testing.T) {
|
||||
if !ok {
|
||||
t.Fatal("not a dnsDialer")
|
||||
}
|
||||
scd, ok := dnsd.Dialer.(*saverConnDialer)
|
||||
dad, ok := dnsd.Dialer.(*netxlite.DialerLegacyAdapter)
|
||||
if !ok {
|
||||
t.Fatal("invalid type")
|
||||
}
|
||||
scd, ok := dad.DialerLegacy.(*saverConnDialer)
|
||||
if !ok {
|
||||
t.Fatal("not a saverConnDialer")
|
||||
}
|
||||
@@ -48,12 +52,16 @@ func TestNewCreatesTheExpectedChain(t *testing.T) {
|
||||
if !ok {
|
||||
t.Fatal("not a loggingDialer")
|
||||
}
|
||||
ewd, ok := ld.Dialer.(*errorsx.ErrorWrapperDialer)
|
||||
dad, ok = ld.Dialer.(*netxlite.DialerLegacyAdapter)
|
||||
if !ok {
|
||||
t.Fatal("invalid type")
|
||||
}
|
||||
ewd, ok := dad.DialerLegacy.(*errorsx.ErrorWrapperDialer)
|
||||
if !ok {
|
||||
t.Fatal("not an errorWrappingDialer")
|
||||
}
|
||||
_, ok = ewd.Dialer.(*net.Dialer)
|
||||
_, ok = ewd.Dialer.(*netxlite.DialerSystem)
|
||||
if !ok {
|
||||
t.Fatal("not a net.Dialer")
|
||||
t.Fatal("not a DialerSystem")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,7 +209,7 @@ func NewTLSDialer(config Config) TLSDialer {
|
||||
config.TLSConfig.InsecureSkipVerify = config.NoTLSVerify
|
||||
return &netxlite.TLSDialer{
|
||||
Config: config.TLSConfig,
|
||||
Dialer: config.Dialer,
|
||||
Dialer: netxlite.NewDialerLegacyAdapter(config.Dialer),
|
||||
TLSHandshaker: h,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package netx_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
"testing"
|
||||
@@ -16,6 +18,7 @@ import (
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/netx/trace"
|
||||
"github.com/ooni/probe-cli/v3/internal/errorsx"
|
||||
"github.com/ooni/probe-cli/v3/internal/netxlite"
|
||||
"github.com/ooni/probe-cli/v3/internal/netxlite/mocks"
|
||||
)
|
||||
|
||||
func TestNewResolverVanilla(t *testing.T) {
|
||||
@@ -486,8 +489,15 @@ func TestNewWithDialer(t *testing.T) {
|
||||
func TestNewWithTLSDialer(t *testing.T) {
|
||||
expected := errors.New("mocked error")
|
||||
tlsDialer := &netxlite.TLSDialer{
|
||||
Config: new(tls.Config),
|
||||
Dialer: netx.FakeDialer{Err: expected},
|
||||
Config: new(tls.Config),
|
||||
Dialer: &mocks.Dialer{
|
||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||
return nil, expected
|
||||
},
|
||||
MockCloseIdleConnections: func() {
|
||||
// nothing
|
||||
},
|
||||
},
|
||||
TLSHandshaker: &netxlite.TLSHandshakerConfigurable{},
|
||||
}
|
||||
txp := netx.NewHTTPTransport(netx.Config{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package tlsdialer_test
|
||||
|
||||
import (
|
||||
"net"
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
@@ -14,7 +13,7 @@ func TestTLSDialerSuccess(t *testing.T) {
|
||||
t.Skip("skip test in short mode")
|
||||
}
|
||||
log.SetLevel(log.DebugLevel)
|
||||
dialer := &netxlite.TLSDialer{Dialer: new(net.Dialer),
|
||||
dialer := &netxlite.TLSDialer{Dialer: netxlite.DefaultDialer,
|
||||
TLSHandshaker: &netxlite.TLSHandshakerLogger{
|
||||
TLSHandshaker: &netxlite.TLSHandshakerConfigurable{},
|
||||
Logger: log.Log,
|
||||
|
||||
@@ -24,7 +24,9 @@ func TestSaverTLSHandshakerSuccessWithReadWrite(t *testing.T) {
|
||||
saver := &trace.Saver{}
|
||||
tlsdlr := &netxlite.TLSDialer{
|
||||
Config: &tls.Config{NextProtos: nextprotos},
|
||||
Dialer: dialer.New(&dialer.Config{ReadWriteSaver: saver}, &net.Resolver{}),
|
||||
Dialer: netxlite.NewDialerLegacyAdapter(
|
||||
dialer.New(&dialer.Config{ReadWriteSaver: saver}, &net.Resolver{}),
|
||||
),
|
||||
TLSHandshaker: tlsdialer.SaverTLSHandshaker{
|
||||
TLSHandshaker: &netxlite.TLSHandshakerConfigurable{},
|
||||
Saver: saver,
|
||||
@@ -117,7 +119,7 @@ func TestSaverTLSHandshakerSuccess(t *testing.T) {
|
||||
saver := &trace.Saver{}
|
||||
tlsdlr := &netxlite.TLSDialer{
|
||||
Config: &tls.Config{NextProtos: nextprotos},
|
||||
Dialer: new(net.Dialer),
|
||||
Dialer: netxlite.DefaultDialer,
|
||||
TLSHandshaker: tlsdialer.SaverTLSHandshaker{
|
||||
TLSHandshaker: &netxlite.TLSHandshakerConfigurable{},
|
||||
Saver: saver,
|
||||
@@ -182,7 +184,7 @@ func TestSaverTLSHandshakerHostnameError(t *testing.T) {
|
||||
}
|
||||
saver := &trace.Saver{}
|
||||
tlsdlr := &netxlite.TLSDialer{
|
||||
Dialer: new(net.Dialer),
|
||||
Dialer: netxlite.DefaultDialer,
|
||||
TLSHandshaker: tlsdialer.SaverTLSHandshaker{
|
||||
TLSHandshaker: &netxlite.TLSHandshakerConfigurable{},
|
||||
Saver: saver,
|
||||
@@ -215,7 +217,7 @@ func TestSaverTLSHandshakerInvalidCertError(t *testing.T) {
|
||||
}
|
||||
saver := &trace.Saver{}
|
||||
tlsdlr := &netxlite.TLSDialer{
|
||||
Dialer: new(net.Dialer),
|
||||
Dialer: netxlite.DefaultDialer,
|
||||
TLSHandshaker: tlsdialer.SaverTLSHandshaker{
|
||||
TLSHandshaker: &netxlite.TLSHandshakerConfigurable{},
|
||||
Saver: saver,
|
||||
@@ -248,7 +250,7 @@ func TestSaverTLSHandshakerAuthorityError(t *testing.T) {
|
||||
}
|
||||
saver := &trace.Saver{}
|
||||
tlsdlr := &netxlite.TLSDialer{
|
||||
Dialer: new(net.Dialer),
|
||||
Dialer: netxlite.DefaultDialer,
|
||||
TLSHandshaker: tlsdialer.SaverTLSHandshaker{
|
||||
TLSHandshaker: &netxlite.TLSHandshakerConfigurable{},
|
||||
Saver: saver,
|
||||
@@ -282,7 +284,7 @@ func TestSaverTLSHandshakerNoTLSVerify(t *testing.T) {
|
||||
saver := &trace.Saver{}
|
||||
tlsdlr := &netxlite.TLSDialer{
|
||||
Config: &tls.Config{InsecureSkipVerify: true},
|
||||
Dialer: new(net.Dialer),
|
||||
Dialer: netxlite.DefaultDialer,
|
||||
TLSHandshaker: tlsdialer.SaverTLSHandshaker{
|
||||
TLSHandshaker: &netxlite.TLSHandshakerConfigurable{},
|
||||
Saver: saver,
|
||||
|
||||
Reference in New Issue
Block a user